【问题标题】:extracting particular column from a list of multiple data frames and combine them into a new data frame in r从多个数据帧列表中提取特定列,并将它们组合成 r 中的新数据帧
【发布时间】:2019-02-01 11:47:46
【问题描述】:

如何提取列表的多个数据框的特定列,例如所有 dfs 的第 8 列,并将提取的列组合成一个新的数据框。

我使用的 for 循环没有给我想要的输出。我更喜欢使用 lapply() 函数而不是 for 循环。你知道我该怎么做吗?

new_df <- data.frame()

for(i in 1:length(list_of_dfs)){

    col_8 <- list_of_dfs[[i]][8]

    new.df[i] <- col_8
}

View(df)

【问题讨论】:

  • 你想要的输出是什么?一个大的长data.frame或跨页面运行的多个列? do.call(rbind, lapply(list_of_dfs, `[`, 8)) 得到你想要的吗?
  • 感谢您的回复。我想有一个所有列彼此相邻的表。我试过你的命令,但它不起作用。我使用 typeof() 并意识到列表中的表是列表而不是数据框。也许这就是你的命令对我不起作用的原因。我正在尝试这个 for 循环,但它只将最后一个表中的列绑定到我的主数据框。 link 斜体 粗体 for(i in 1:3){ df &lt;- data.frame(df.list[i]) d &lt;- df[10] new.df &lt;- cbind(d, cufflinks.df) }
  • 这应该没什么区别 - data.frame 在引擎盖下是 list - 请参阅 typeof(data.frame(a=1:3)) 。如果您可以提供一个代表您的实际数据的示例,我相信我可以给您一些工作代码。例如:list_of_dfs &lt;- rep(list(data.frame(a=1:3,b=2:4)),3); data.frame(lapply(list_of_dfs, `[`, 2)) 或类似的东西应该接近你想要的。

标签: r list for-loop dataframe lapply


【解决方案1】:

您可以使用lapplydo.call 来实现:

library(magrittr)
lapply(list_of_dfs,function(i) i[,8]) %>% do.call(cbind,.) %>% data.frame

【讨论】:

  • 您可以删除 cbind 部分,因为您将从列表到矩阵再到 data.frame。这也将不必要地强制所有内容为同一类型。由于 data.frame 是一个列表,因此只需 lapply(list_of_dfs,function(i) i[,8]) %&gt;% data.frame 即可。
  • 感谢您的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
相关资源
最近更新 更多