我想使用ddply函数将相同的函数写入多个列,但我尝试继续将它们写在一行中,希望看到有更好的方法吗?
这是一个简单的数据版本:
data<-data.frame(TYPE=as.integer(runif(20,1,3)),A_MEAN_WEIGHT=runif(20,1,100),B_MEAN_WEIGHT=runif(20,1,10))
Run Code Online (Sandbox Code Playgroud)
我想通过这样做找出A_MEAN_WEIGHT和B_MEAN_WEIGHT列的总和:
ddply(data,.(TYPE),summarise,MEAN_A=sum(A_MEAN_WEIGHT),MEAN_B=sum(B_MEAN_WEIGHT))
Run Code Online (Sandbox Code Playgroud)
但在我目前的数据中,我有超过8个"*_MEAN_WEIGHT",而我已经厌倦了将它们写成8次
ddply(data,.(TYPE),summarise,MEAN_A=sum(A_MEAN_WEIGHT),MEAN_B=sum(B_MEAN_WEIGHT),MEAN_C=sum(C_MEAN_WEIGHT),MEAN_D=sum(D_MEAN_WEIGHT),MEAN_E=sum(E_MEAN_WEIGHT),MEAN_F=sum(F_MEAN_WEIGHT),MEAN_G=sum(G_MEAN_WEIGHT),MEAN_H=sum(H_MEAN_WEIGHT))
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来写这个?谢谢您的帮助!!
该plyr-centred方法是使用colwise
例如
ddply(data, .(TYPE), colwise(sum))
TYPE A_MEAN_WEIGHT B_MEAN_WEIGHT
1 1 319.8977 60.80317
2 2 621.6745 37.05863
Run Code Online (Sandbox Code Playgroud)
.col 如果只需要子集,则可以将列名称作为参数传递
您也可以仅使用numcolwise或catcolwise操作数字或分类列.
请注意,您可以使用sapply代替最基本的用途colwise
ddply(data, .(TYPE), sapply, FUN = 'mean')
Run Code Online (Sandbox Code Playgroud)
惯用的data.table方法是使用 lapply(.SD, fun)
例如
dt <- data.table(data)
dt[,lapply(.SD, sum) ,by = TYPE]
TYPE A_MEAN_WEIGHT B_MEAN_WEIGHT
1: 2 621.6745 37.05863
2: 1 319.8977 60.80317
Run Code Online (Sandbox Code Playgroud)