【发布时间】: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