跨多个数据帧元素的均值和标准差
Mean and standard deviation across element of multiple dataframes
假设我有两个数据框 df1
和 df2
:
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
计算多个列上每个 Name
的 mean
和 sd
。您可以使用以下代码:
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
假设我有两个数据框 df1
和 df2
:
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
计算多个列上每个 Name
的 mean
和 sd
。您可以使用以下代码:
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