使用for循环结果创建数据框

时间:2014-01-29 21:06:16

标签: r for-loop

我想创建一个数据框,其中df1值的平均值和df2值的平均值作为新数据框中的列。我可以使用

获取要打印的值
for (i in samples) {    
print(c(with(df1, mean(d18_VSMOW[Sample == i]))))
}

但我无法将结果导入数据框4

df4=
Sample Mean1 Mean2
12adk9  #     #
12adk12 #     #
12adk20 #     #

我的数据与样本编号相关,如df1

所示
df1=
Sample  d18_VSMOW
12adk9  12.27
12adk9  12.15
12adk9  11.78
12adk9  12.21
12adk9  12.52
12adk9  12.28
12adk12 10.7
12adk12 11.15
12adk12 11.24
12adk20 11.16
12adk20 11.14

和更多数据共享样本名称,但具有不同的值,如df2和不同的行数

df2 = 
Sample  d18_VSMOW
12adk9  15.27
12adk9  15.15
12adk9  17.78
12adk9  19.21
12adk9  20.52
12adk9  22.28
12adk12 16.7
12adk12 15.15
12adk12 16.24
12adk20 19.16
12adk20 19.14
12adk20 20.02
12adk20 21.02
12adk20 22.02
12adk20 23.02
12adk20 24.02

我有第三个包含所有样本名称的数据框:

samples = 
Sample
12adk9
12adk12
12adk20

1 个答案:

答案 0 :(得分:1)

aggregate功能对您的情况会更好。首先,您按主题计算df1的均值,然后对df2执行相同的操作。然后可以将其结果合并在一起。

df1means <- aggregate(df1, by = list(Sample = df1$Sample), mean)
df2means <- aggregate(df2, by = list(Sample = df2$Sample), mean)
df4 <- merge(df1means, df2means, by = Sample)

如果df1中的样本数多于df2,则可能需要查看强制所有行的all.xall.ymerge个参数来自xy(在您的情况下为df1meansdf2means)将包含在最终结果中。