【问题标题】:R Modify dataframes to the same lengthR 将数据帧修改为相同的长度
【发布时间】:2020-04-02 10:09:52
【问题描述】:

我有一个包含多个数据框的列表,其中包含两列(年份和区域)。
问题是某些数据帧仅包含 2002-2015 或 2003-2017 年的信息,而其他数据框则包含 2001-2018 年的信息等等。所以它们的长度不同。

list:

list(structure(list(Year= c(2001,2002,2004,2005), Area=c(1,2,3,4), class ="data.frame"), 
structure(list(Year= c(2001,2004,2018), Area=c(1,2,4), class ="data.frame", 
(list(Year= c(2008,2009,2014,2015,2016), Area=c(1,2,3,4,5), class ="data.frame"))

如果没有当年的区域信息,我如何通过添加NA 或更好的0 将它们全部修改为相同的长度(从 2001 年到 2018 年)。

【问题讨论】:

  • 请使用 dput() 函数显示您的列表
  • 这是一个很长的输出,因为它包含列表的所有元素
  • 阅读此处有关大型数据集的帖子。如果不能快速复制您的示例,人们将不太愿意帮助您stackoverflow.com/questions/5963269/…

标签: r list dataframe


【解决方案1】:

A = data.frame(Year= c(2001,2002,2004,2005), Area=c(1,2,3,4)) 
B = data.frame(Year= c(2001,2004,2018), Area=c(1,2,4)) 
C = list(A, B) 

然后我们有

Ref = data.frame(Year = 2001:2018)
New.List = lapply(C, function(x) dplyr::left_join(Ref, x))

得到想要的结果

[[1]]
   Year Area
1  2001    1
2  2002    2
3  2003   NA
4  2004    3
5  2005    4
6  2006   NA
7  2007   NA
8  2008   NA
9  2009   NA
10 2010   NA
11 2011   NA
12 2012   NA
13 2013   NA
14 2014   NA
15 2015   NA
16 2016   NA
17 2017   NA
18 2018   NA

[[2]]
   Year Area
1  2001    1
2  2002   NA
3  2003   NA
4  2004    2
5  2005   NA
6  2006   NA
7  2007   NA
8  2008   NA
9  2009   NA
10 2010   NA
11 2011   NA
12 2012   NA
13 2013   NA
14 2014   NA
15 2015   NA
16 2016   NA
17 2017   NA
18 2018    4

要确保列表中的所有 data.frames 共享相同的 Year 拼写,请执行

lapply(C, function(x) {colnames(x)[1] = "Year"; x})

假设第一列始终是年份列。

【讨论】:

  • 它说“error:by required,因为数据源没有公共变量”
  • 您确定列表中所有 data.frames 中的“Year”-Variable 的拼写方式相同吗?
  • 很高兴为您提供帮助!您也可以接受答案以表明问题已得到解答。
猜你喜欢
  • 1970-01-01
  • 2020-01-11
  • 2016-11-03
  • 2020-09-09
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 2021-07-19
  • 2017-04-06
相关资源
最近更新 更多