R 如何根据不同的列查找列中的平均值?
我有这个数据帧,我试图找到同一个ID的索引值的平均值,并为其余的分配NA(或者只保留预期输出中的值) 预期输出为R 如何根据不同的列查找列中的平均值?,r,R,我有这个数据帧,我试图找到同一个ID的索引值的平均值,并为其余的分配NA(或者只保留预期输出中的值) 预期输出为 ID hot index mean 41400 10 2 2.67 41400 12 2 2.67 41400 75 4 2.67 41401 89 5 4.67 41401 25 3 4.67 41401 100 6 4.67 20445 67
ID hot index mean
41400 10 2 2.67
41400 12 2 2.67
41400 75 4 2.67
41401 89 5 4.67
41401 25 3 4.67
41401 100 6 4.67
20445 67 4 3.67
20445 89 6 3.67
20445 4 1 3.67
20443 67 5 6.67
20443 120.2 7 6.67
20443 140.5 8 6.67
20423 170.5 10 12.5
20423 78.1 5 12.5
我不知道该怎么办。你能帮忙吗
谢谢假设您的data.frame名为
dd
,您可以使用ave
功能,该功能在组级别执行功能。比如说
meaned<-with(dd, ave(index, ID, FUN=mean))
cbind(dd, meaned)
使用数据表示。表
library(data.table)
setDT(dd)[,meaned:=mean(index), by=ID]
您在文章中提到,如果要将NA分配给除第一行以外的所有行,请为其余行分配NA
setDT(dd)[,c("meaned", "N") := {list(mean(index) , 1:.N)}, by=ID][N!=1, meaned:=NA][,N:=NULL]
dd
# ID hot index meaned
#1: 41400 10.0 2 2.666667
#2: 41400 12.0 2 NA
#3: 41400 75.0 4 NA
#4: 41401 89.0 5 4.666667
#5: 41401 25.0 3 NA
#6: 41401 100.0 6 NA
#7: 20445 67.0 4 3.666667
#8: 20445 89.0 6 NA
#9: 20445 4.0 1 NA
#10: 20443 67.0 5 6.666667
#11: 20443 120.2 7 NA
#12: 20443 140.5 8 NA
#13: 20423 170.5 10 7.500000
#14: 20423 78.1 5 NA
输出不匹配。输入中没有ID 20423。不正确的输出对测试没有帮助。抱歉。我正在编辑它。我猜,替换总数= MIN会使我明白吗?谢谢。@maximusyoda-ave
默认给出一个平均值,所以ave(index,ID)
就可以了。这是一个我从未听说过的漂亮函数。@maximusyoda。在点击提交之前尝试编辑。你真的改变了问题。是的,我的错。不会再发生了。
setDT(dd)[,c("meaned", "N") := {list(mean(index) , 1:.N)}, by=ID][N!=1, meaned:=NA][,N:=NULL]
dd
# ID hot index meaned
#1: 41400 10.0 2 2.666667
#2: 41400 12.0 2 NA
#3: 41400 75.0 4 NA
#4: 41401 89.0 5 4.666667
#5: 41401 25.0 3 NA
#6: 41401 100.0 6 NA
#7: 20445 67.0 4 3.666667
#8: 20445 89.0 6 NA
#9: 20445 4.0 1 NA
#10: 20443 67.0 5 6.666667
#11: 20443 120.2 7 NA
#12: 20443 140.5 8 NA
#13: 20423 170.5 10 7.500000
#14: 20423 78.1 5 NA