R 按组对列应用函数

R 按组对列应用函数,r,function,dataframe,plyr,R,Function,Dataframe,Plyr,我想根据数据集的类别对其应用一个函数。给定以下数据帧 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) 我想每年都在业力专栏上做手术。如果我想应用sum这样的函数,可以使用ddply: ddply(df, .(year),summarize, sum(karma))

我想根据数据集的类别对其应用一个函数。给定以下数据帧

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)
我想每年都在业力专栏上做手术。如果我想应用sum这样的函数,可以使用ddply:

ddply(df, .(year),summarize, sum(karma))
例如,我如何将其应用于我自己编写的函数

calc <- function(d,c){(d*5+c*7)/12}

calc您可以使用
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)
它不应该是calc(狗、猫)吗?
library('tidyr')
library('dplyr')
df %>% 
 spread(pet, karma, drop = FALSE) %>% 
 mutate(karma = calc(dog, cat), pet = "both") %>% 
 select(year, pet, karma) %>%
 rbind(df)