我有这个数据框,我试图找到相同ID的索引值的平均值,并为其余的ID分配NA(或者只保留预期输出中的值)。
ID hot index
41400 10 2
41400 12 2
41400 75 4
41401 89 5
41401 25 3
41401 100 6
20445 67 4
20445 89 6
20445 4 1
20443 67 5
20443 120.2 7
20443 140.5 8
20423 170.5 10
20423 78.1 5
预期输出
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
我不知道该怎么做。你能帮忙吗?
由于
答案 0 :(得分:1)
假设您的data.frame名为dd
,您可以使用在组级别执行功能的ave
函数。例如
meaned<-with(dd, ave(index, ID, FUN=mean))
cbind(dd, meaned)
答案 1 :(得分:1)
使用data.table
library(data.table)
setDT(dd)[,meaned:=mean(index), by=ID]
您在帖子assign NA's for the rest
中提到过,如果要为所有行分配NA,除了每个ID的第一行
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