如何根据不同的列找到列中的平均值?

时间:2014-07-30 01:55:25

标签: r

我有这个数据框,我试图找到相同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

我不知道该怎么做。你能帮忙吗?

由于

2 个答案:

答案 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