gpt4 book ai didi

r - 合并R中具有不同行长的多个data.frames

转载 作者:行者123 更新时间:2023-12-04 09:28:00 26 4
gpt4 key购买 nike

我对 R 比较陌生,并试图弄清楚如何合并具有不同行数但都具有一个公共(public)列“Year”的多个 data.frames。我看过类似的问题,这个问题:
Merge dataframes, different lengths
提供了一个很好的答案。但是,当我将它应用于我自己的数据时,我无法让它与多个 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"))

目标是生成一个数据框,其中第 1 列是年份,第 2 列是站点 1,第 3 列是站点 2,依此类推。我目前有大约 17 个 data.frames(最多 40 个),对应于 17 个具有可变时间线/行数的站点。

任何帮助,将不胜感激。

我试过的代码:
> NewDF <- merge(df1, df2, by="Year", all.x=TRUE, all.y=TRUE)  

这对 2 个 data.frame 非常有效,但是当我尝试添加另一个 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

最佳答案

您想将结果与 df3 合并, IE。:

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

或者,如果您有 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

关于r - 合并R中具有不同行长的多个data.frames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22023262/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com