【问题标题】:Iterated sub-setting a dataframe using dplyr?使用 dplyr 迭代子设置数据帧?
【发布时间】:2017-05-10 22:48:21
【问题描述】:

我有一个天气数据集,其中包含多年的观测结果。我想做的是创建某种循环,它允许我将原始数据集一般地子集化为给定年份的子数据集。

让我们调用我的数据集 Weather_Data。下面是一些简单的示例数据:

Weather_Data

Year  GPS_Coord
2012  x1
2012  x2
2013  x3
2013  x4
2014  x5
2014  x6
2015  x7
2015  x8

在尝试创建某种循环时,我从如下代码 sn-p 开始:

Weather_Data_2012<-Weather_Data%>%filter(Year=="2012")

此代码运行良好。然而,当试图创建某种循环时,我尝试做这样的事情:

Year_list<-list()
Year_sub<-as.character(c(2012:2015))

    for (i in 1:length(Year_sub)){
      Year_list[[i]]<-Weather_Data%>%filter(Year=="i")    
}

当我执行这段代码时,我会得到这个输出:

A tibble: 0 × 11

所以,显然循环没有按预期工作!

这是我想通过这段代码完成的:

   Year_list[[1]]

Year  GPS_Coord
2012  x1
2012  x2

   Year_list[[2]]

Year  GPS_Coord
2013  x3
2013  x4



  Year_list[[3]]

Year  GPS_Coord
2014  x5
2014  x6

Year_list[[4]]

Year  GPS_Coord
2015  x7
2015  x8

有什么建议吗?谢谢。

【问题讨论】:

  • 您需要使用==Year_sub[i] 而不是=="i" 来访问您年份列表Year_sub 的元素i
  • 您确定需要创建这样的列表吗?我怀疑group_by(Year) 可能会更简单地获得相同的结果,这是对dplyr 中的每个子集进行分析的标准方法。
  • 我同意 Marius - 这是毫无意义的,因为您已经在使用 dplyr 并且它具有 group_by 功能。此外,split(Weather_Data, Weather_Data$Year) 将给你你想要的结果,根本没有包。
  • @Marius 好的,谢谢。在 ggplot2 中创建绘图时可以使用 group_by df 吗?
  • 同意以前的cmets。您拥有对子集执行操作所需的一切,而无需创建新的数据结构。

标签: r loops iteration dplyr subset


【解决方案1】:

lapply 迭代第一个参数,将每个值传递给定义的函数,并构建结果列表,但 @thelatemail 的拆分更好

lapply(unique(df$Year), function(yr) {df[df$Year==yr,]})

【讨论】:

    猜你喜欢
    • 2018-07-10
    • 2018-03-12
    • 2018-11-09
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    相关资源
    最近更新 更多