按组划分的数据框中的平均列数

时间:2015-09-04 17:36:15

标签: r

我的data.frame

df <- data.frame(ID=rep(1:3, 3), Obs_1=rnorm(9), Obs_2=rnorm(9), Obs_3=rnorm(9))

我想通过ID计算每个列的平均值。我尝试了两种方法: 1)

ag <- aggregate(. ~ ID, df, function(x) c(mean = mean(x)))

返回

  ID      Obs_1      Obs_2      Obs_3
1  1 0.41220831 -0.9999704 -0.7234958
2  2 0.03564336  0.5014259  0.4847635
3  3 0.05647885  0.2067311 -0.0542368

为什么它没有表明&#34;意思是&#34;在列名称中如何报告?像这样的东西:

Obs_1.mean  Obs_2.mean Obs_3.mean  

2)第二种方法

 df[, c(mean = lapply(.SD, mean), sd = lapply(.SD, sd)), by = ID]

它给出了

unused argument (by = ID)

谢谢

1 个答案:

答案 0 :(得分:2)

这是一种方法:

echo Write log file > LogStart.txt
C:\Windows\System32\robocopy.exe "\\PCICSWKS001\D$\ToBeMoved" "V:" /s /e /MOV /r:0 /W:0
echo Write log file > LogEnd.txt

它产生:

import shlex

size_cmd = [
    'ssh', '-l', 'root', '-A', rh,
    '-i', '/Users/macbookpro/Development/serverkey/id_rsa',
    'du -sh %s' % shlex.quote(path),
]

关于你的问题为什么这个伎俩

df <- data.frame(ID=rep(1:3, 3),
                 Obs_1=rnorm(9),
                 Obs_2=rnorm(9),
                 Obs_3=rnorm(9))

ag <- aggregate(. ~ ID, df, FUN = mean)

colnames(ag) <- sapply(colnames(ag),
                       FUN = function(x) { paste0(x, ifelse(x=="ID", "", ".mean")) })

将名称“mean”粘贴到FUN的结果不起作用:

我想这是由于aggregate()执行的分组。理论上,每个组可能会返回一个不同的名称。哪些可能存在冲突的名称应聚合()然后使用它来命名聚合数据框的完整列??

如果没有发生分组,就像这里一样,

  ID Obs_1.mean Obs_2.mean Obs_3.mean
1  1  0.2675131 -0.3494175 -0.3128264
2  2  1.0988356 -0.6645116 -0.2192402
3  3 -1.1569562 -0.4040192 -0.1265475

我们得到了预期的名字:

FUN = function(x) { c(mean = mean(x)) })