使用变量基于日期(月)的子集数据框

时间:2018-12-03 23:40:58

标签: r variables subset

我有一个非常大的数据框,我想根据%Y-%m%-%d类型的日期列将其细分为几个月。看起来像这样:

>head(df)

       TID ItemID       Date
1 89522728  17265 2017-12-29
2 89522728  13228 2017-12-29
3 89522712  20894 2017-12-29
4 89522712  31013 2017-12-29
5 89522704  11097 2017-12-29
6 89522704  27290 2017-12-29

我尝试了几项没有解决方案的事情(例如循环和其他不太优雅的方法),现在我采用了以下可行的方法:

jan <- subset(df, format.Date(Date, "%m")=="01")
feb <- subset(df, format.Date(Date, "%m")=="02")
mar <- subset(df, format.Date(Date, "%m")=="03")
.
.
.
dec <- subset(df, format.Date(Date, "%m")=="12")

但是,必须有其他不错的elegang解决方案,在这里我可以一次又一次地编写相同的代码吗?例如。像c <- c("jan", "feb", ... "dec"),然后将其与d <- seq(1,12,by=1)结合使用,并与subset部分结合使用?我完全错了吗,还是有一种简洁而优雅的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

通常,最好在全局环境中创建数据帧列表,而不是创建免费数据帧。然后可以使用L$JanL$Feb等或L[[1]]L[[2]]等来引用任何特定月份的数据帧。

L <- split(DF, format(DF$Date, "%m"))
names(L) <- month.abb[as.numeric(names(L))]

尽管如上所述,不建议将它们复制到全局环境中

list2env(L, .GlobalEnv)