【发布时间】:2015-11-12 22:10:23
【问题描述】:
例如,我有 3 个数据框:
test.df1
date x y z
1 1998-01-01 10 10 10
2 1998-02-01 10 10 10
3 1998-03-01 10 10 10
4 1998-04-01 10 10 10
5 1998-05-01 10 10 10
6 1998-06-01 10 10 10
test.df2
date x y z
1 1998-03-01 5 5 5
2 1998-04-01 5 5 5
3 1998-05-01 5 5 5
4 1998-06-01 5 5 5
test.df3
date x y z
1 1998-05-01 1 1 1
2 1998-06-01 1 1 1
我想将它们合并在一起,以便新数据框的行数与最大数据框中的行数相同(在此示例中为test.df1),并且当日期重叠时,添加变量的平均值到新的数据框。在上面的示例中,新数据框应该有4 列和6 行。
x、y 和 z 对于 1998-01-01 和 1998-02-01 应保留为 10;
对于1998-03-01 到1998-06-01 应该是7.5(10 + 5 的平均值);
对于1998-05-01 和1998-06-01 应该是5.33(10 + 5 + 1 的平均值)
有没有办法在 r 中做到这一点?
dput(test.df1)
structure(list(date = structure(c(10227, 10258, 10286, 10317,
10347, 10378), class = "Date"), x = c(10, 10, 10, 10, 10, 10),
y = c(10, 10, 10, 10, 10, 10), z = c(10, 10, 10, 10, 10,
10)), .Names = c("date", "x", "y", "z"), row.names = c(NA,
-6L), class = "data.frame")
dput(test.df2)
structure(list(date = structure(c(10286, 10317, 10347, 10378), class = "Date"),
x = c(5, 5, 5, 5), y = c(5, 5, 5, 5), z = c(5, 5, 5, 5)), .Names = c("date",
"x", "y", "z"), row.names = c(NA, -4L), class = "data.frame")
dput(test.df3)
structure(list(date = structure(c(10347, 10378), class = "Date"),
x = c(1, 1), y = c(1, 1), z = c(1, 1)), .Names = c("date",
"x", "y", "z"), row.names = c(NA, -2L), class = "data.frame")
【问题讨论】:
-
可以做到,但是我能想到的唯一方法是相当复杂。我将查询每个数据框元素以查找匹配的日期字符串字段,并根据所有匹配项的平均值构造一个新数据框。它相当直接的数据框架工作。
-
答案:是的,这可以在 R 中完成。