Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何根据不同的列查找列中的平均值?_R - Fatal编程技术网

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

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的索引值的平均值,并为其余的分配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      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