【问题标题】:R - For loop with dplyr for subsetting data across multiple data framesR - 带有 dplyr 的 For 循环,用于跨多个数据帧对数据进行子集化
【发布时间】:2021-08-10 03:36:36
【问题描述】:

我有 50 个包含温度和湿度数据的数据框,我想创建一个新的数据框,其中包含每个数据框的特定行。首先,我创建了一个列表 (onomata_list),其中导入了所有 50 个数据帧,其次我创建了一个虚拟数据帧 (All_stations_30_6_17) 来“发送”来自每个数据帧的行,最后我编写了以下 for 循环以实现上述目的:

 for(i in 1:length(onomata_list)){
  new_df <- onomata_list[[i]] %>% filter(date == "2017-06-30" & time == "17:00")
  All_Stations_30_6_17 <- rbind(All_stations_30_6_17,new_df)
}

很遗憾,它不起作用,我收到以下消息:

rbind 中的错误(All_stations_30_6_17,new_df): 找不到对象“All_stations_30_6_17”

它试图在过去几个小时内解决它,但我没有运气。有什么建议吗?

【问题讨论】:

  • 在您发布的代码中,您在使用之前没有创建变量All_stations_30_6_17。如果您可以发布一个可重现的小示例,将会很有帮助。

标签: r for-loop dplyr subset


【解决方案1】:

如果您有数据框列表,这应该可以工作:

library(purrr)
library(dplyr)

All_Stations_30_6_17 <- map_dfr(onomata_list, ~ filter(.x, date == "2017-06-30" & time == "17:00"))

Map 函数通常会遍历列表元素。这里map_drc 会将 purrr 样式的函数(用~ 表示)映射到onomata_list 的列表元素上,然后将行绑定(因此是_dfr)映射到数据帧输出中。

【讨论】:

  • 完美运行。非常感谢您不仅提供解决方案,还向我介绍了这个新功能!
  • @H.Johnson tidyverse 是几个非常有用的数据处理包的集合。 purrrdplyr 是其中的两个包,但我认为你会发现学习这些包很有帮助。
  • 我一定会这样做LMc!再次感谢!!
  • 你好!我想对您的代码进行一些说明。如果我想从列表的内容创建 1 个数据框,它可以完美地工作,但是如果我想将每个列表的元素转换为一个新的数据框,但保留每个新数据框的过滤器,我可以通过更改上述脚本?我已经尝试了大约 2 个小时,但我没有设法实现它..
  • @H.Johnson 那么我将只使用map 而不是map_dfr,这会将列表转换为单个堆叠数据框。
猜你喜欢
  • 2015-06-20
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 2021-07-05
  • 2022-01-16
  • 1970-01-01
相关资源
最近更新 更多