【问题标题】:Lapply to Add Columns to Each Dataframe in a List [duplicate]Lapply 向列表中的每个数据框添加列 [重复]
【发布时间】:2014-04-07 00:08:43
【问题描述】:

我的问题有两个..

  1. 我有一个数据框列表,在 R 中使用 lapply,我想为列表中的每个数据框添加一列。
  2. 如果可能,添加的列实际上应该从列表中按顺序获取值。我有一个与数据框列表长度相同的列表,并且该列表中的每个值都应该是添加的列值。

我这样做的原因是因为我正在导入的每个数据集的文件名都有日期信息,例如文件名包含 Jun12_2003。所以我想导入每个数据集,然后为年份和日期分配一个列,从文件名中获取信息(到目前为止,这部分是用正则表达式完成的)。

感谢您的帮助!

【问题讨论】:

  • 你想要mapply,我相信。

标签: r


【解决方案1】:

使用Map。根据 Ari 的建议,它是 mapply(..., SIMPLIFY = FALSE) 的缩写。

df1 <- data.frame(x = runif(3), y = runif(3))
df2 <- data.frame(x = runif(3), y = runif(3))
dfs <- list(df1, df2)
years <- list(2013, 2014)

Map(cbind, dfs, year = years)
# [[1]]
#           x         y year
# 1 0.8843945 0.6285246 2013
# 2 0.8400041 0.1369520 2013
# 3 0.4398870 0.4660476 2013
# 
# [[2]]
#           x         y year
# 1 0.4153315 0.5831114 2014
# 2 0.9685105 0.2398060 2014
# 3 0.9507591 0.7585670 2014

【讨论】:

  • 如果数据框列表有数千个,并且您有一个相应的列表来命名列表中的这些数据框,该怎么办。我知道有些 dfs 是空的,但是那些空的 dfs 仍然应该从与数据框对应的年份列表中添加一个年份。空数据框会导致错误吗?我也有类似的问题,但年份并没有与正确的列对齐。
  • 感谢您建议 Map() 而不是 mapply() - 这是一个更简单的实现,因此这是我遇到的这个问题的最佳答案
  • 这是最好的解决方案 - 就我而言(在撰写本文时),Map(cbind,dfs,var=values) 按预期工作,但 mapply(cbind,dfs,var=values,simplify=FALSE) 没有!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-11
  • 2016-12-19
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2015-04-23
  • 2018-05-01
相关资源
最近更新 更多