跨多个数据帧元素的均值和标准差

Mean and standard deviation across element of multiple dataframes

假设我有两个数据框 df1df2:

df1 = data.frame(Name = c('one','two', 'three','four'), 
                 x=c(4,6,2,9),
                 y=c(45,78,44,8),
                 z=c(56,52,45,88))

df2 = data.frame(Name = c('one','two', 'three','four'), 
                 x=c(5,8,3,3),
                 y=c(34,53,50,9),
                 z=c(38,96,62,83))

我正在尝试输出一个数据帧 dfout,它具有每个 Name 元素的均值和标准差,即:

Name = 'one'...
xmean = 4.5...
xsd = 0.5...
.
.
.

我尝试在组合数据帧上使用 bind_row(),然后使用 aggregate()。 运行 遇到了一些麻烦,我认为有一种更简单的方法可以做到这一点,类似于

所建议的方法

欢迎任何意见。

您可以使用 bind_rows 合并您的两个数据框。使用 aggregate 计算多个列上每个 Namemeansd。您可以使用以下代码:

library(dplyr)
aggregate(. ~ Name, bind_rows(df1, df2), function(x) c(mean = mean(x), sd = sd(x)))

输出:

   Name x.mean  x.sd y.mean   y.sd z.mean  z.sd
1  four  6.000 4.243  8.500  0.707  85.50  3.54
2   one  4.500 0.707 39.500  7.778  47.00 12.73
3 three  2.500 0.707 47.000  4.243  53.50 12.02
4   two  7.000 1.414 65.500 17.678  74.00 31.11

编辑

重新订购名称:

df3 <- aggregate(. ~ Name, bind_rows(df1, df2), function(x) c(mean = mean(x), sd = sd(x)))
reorder <- c("one", "two", "three", "four")
df3[match(reorder, df3$Name),]

输出:

   Name x.mean  x.sd y.mean   y.sd z.mean  z.sd
2   one  4.500 0.707 39.500  7.778  47.00 12.73
4   two  7.000 1.414 65.500 17.678  74.00 31.11
3 three  2.500 0.707 47.000  4.243  53.50 12.02
1  four  6.000 4.243  8.500  0.707  85.50  3.54