gpt4 book ai didi

r - plyr 包在多列上编写相同的函数

转载 作者:行者123 更新时间:2023-12-04 14:02:29 24 4
gpt4 key购买 nike

我想使用 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))

我想通过这样做找出 A_MEAN_WEIGHT 和 B_MEAN_WEIGHT 列的总和:
ddply(data,.(TYPE),summarise,MEAN_A=sum(A_MEAN_WEIGHT),MEAN_B=sum(B_MEAN_WEIGHT))

但在我目前的数据中,我有超过 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))

有没有更好的方法来写这个?感谢您的帮助!!

最佳答案

plyr -以中心为中心的方法是使用 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

您可以将列名作为参数传递 .col如果你只想要一个子集

您也可以使用 numcolwisecatcolwise仅作用于数字或分类列。

请注意,您可以使用 sapply代替最基本的使用 colwise
ddply(data, .(TYPE), sapply, FUN = 'mean') 

惯用的 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

关于r - plyr 包在多列上编写相同的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16090532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com