按组对列应用函数
Applying functions on columns by group
我想根据类别对数据集应用函数。给定以下数据框
pet <- c(rep("cat",5),rep("dog",5))
year <- c(rep(1991:1995,2))
karma <- c(5,4,1,1,1,6,4,3,2,6)
df <- data.frame(pet,year,karma)
看起来像这样
pet year karma
1 cat 1991 5
2 cat 1992 4
3 cat 1993 1
4 cat 1994 1
5 cat 1995 1
6 dog 1991 6
7 dog 1992 4
8 dog 1993 3
9 dog 1994 2
10 dog 1995 6
我想对每年的 karma 列执行操作。如果我想应用像 sum 这样的函数,可以使用 ddply:
ddply(df, .(year),summarize, sum(karma))
我如何将它应用到我自己编写的函数中,例如
calc <- function(d,c){(d*5+c*7)/12}
其中 d 是对应于每个给定年份狗的业力的值,而 c 对应于猫的业力。
理想情况下,我希望在该数据框中再添加五个条目,其中包含宠物 both、年份和由上述函数计算的业力值。最好的方法是什么?
(非常抱歉,如果这是微不足道的,但我这次真的找不到类似的问题。)
您可以使用 spread
使您的数据框变宽,然后 mutate
来实现您的功能
library('tidyr')
library('dplyr')
df %>%
spread(pet, karma, drop = FALSE) %>%
mutate(karma = calc(dog, cat), pet = "both") %>%
select(year, pet, karma) %>%
rbind(df)
我想根据类别对数据集应用函数。给定以下数据框
pet <- c(rep("cat",5),rep("dog",5))
year <- c(rep(1991:1995,2))
karma <- c(5,4,1,1,1,6,4,3,2,6)
df <- data.frame(pet,year,karma)
看起来像这样
pet year karma
1 cat 1991 5
2 cat 1992 4
3 cat 1993 1
4 cat 1994 1
5 cat 1995 1
6 dog 1991 6
7 dog 1992 4
8 dog 1993 3
9 dog 1994 2
10 dog 1995 6
我想对每年的 karma 列执行操作。如果我想应用像 sum 这样的函数,可以使用 ddply:
ddply(df, .(year),summarize, sum(karma))
我如何将它应用到我自己编写的函数中,例如
calc <- function(d,c){(d*5+c*7)/12}
其中 d 是对应于每个给定年份狗的业力的值,而 c 对应于猫的业力。
理想情况下,我希望在该数据框中再添加五个条目,其中包含宠物 both、年份和由上述函数计算的业力值。最好的方法是什么?
(非常抱歉,如果这是微不足道的,但我这次真的找不到类似的问题。)
您可以使用 spread
使您的数据框变宽,然后 mutate
来实现您的功能
library('tidyr')
library('dplyr')
df %>%
spread(pet, karma, drop = FALSE) %>%
mutate(karma = calc(dog, cat), pet = "both") %>%
select(year, pet, karma) %>%
rbind(df)