我对R比较陌生,试图弄清楚如何将多个data.frames与不同数量的行合并,但所有行都有一个共同的列"Year".我看过类似的问题,这个问题: 合并数据帧,不同的长度 提供了一个很好的答案.但是,当我将它应用于我自己的数据时,我无法使用多个data.frames; 我总是收到一条错误消息.
样本数据:
> df1 <- data.frame(Year=2006:2011, Site1=c("2.3", "1" , "3.1", "2.9", "1.4", "3"))
> df2 <- data.frame(Year=2007:2011, Site2=c("2.7", "4.1", "1.1", "2.6", "3.1"))
> df3 <- data.frame(Year=2008:2011, Site3=c("1.3", "2" , "3.6", "1.7"))
Run Code Online (Sandbox Code Playgroud)
目标是生成单个data.frame,其中第1列是年份,第2列是站点1,第3列是站点2,依此类推.我目前有~17个data.frames(最多40个),对应17个具有可变时间轴/行数的站点.
任何帮助,将不胜感激.
代码我尝试过:
> NewDF <- merge(df1, df2, by="Year", all.x=TRUE, all.y=TRUE)
Run Code Online (Sandbox Code Playgroud)
这适用于2个data.frames,但当我尝试添加另一个data.frame时,我收到了错误消息:
> NewDF <- merge(list=c(df1, df2, df3), by="Year", all.x=TRUE, all.y=TRUE)
Error in as.data.frame(x) : argument "x" is missing, with no default
Run Code Online (Sandbox Code Playgroud)
edd*_*ddi 14
您想要将结果合并df3,即:
merge(df3, merge(df1, df2, by="Year", all.x=TRUE, all.y=TRUE), by = "Year", all.x = TRUE, all.y = TRUE)
# Year Site3 Site1 Site2
#1 2006 <NA> 2.3 <NA>
#2 2007 <NA> 1 2.7
#3 2008 1.3 3.1 4.1
#4 2009 2 2.9 1.1
#5 2010 3.6 1.4 2.6
#6 2011 1.7 3 3.1
Run Code Online (Sandbox Code Playgroud)
或者如果你有data.frame一个列表,请Reduce用以概括上述内容:
Reduce(function(x,y) merge(x, y, by = "Year", all.x = TRUE, all.y = TRUE),
list(df1, df2, df3))
# Year Site1 Site2 Site3
#1 2006 2.3 <NA> <NA>
#2 2007 1 2.7 <NA>
#3 2008 3.1 4.1 1.3
#4 2009 2.9 1.1 2
#5 2010 1.4 2.6 3.6
#6 2011 3 3.1 1.7
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11524 次 |
| 最近记录: |