我有一个非常大的数据框,我想根据%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
部分结合使用?我完全错了吗,还是有一种简洁而优雅的方式做到这一点?
答案 0 :(得分:1)
通常,最好在全局环境中创建数据帧列表,而不是创建免费数据帧。然后可以使用L$Jan
,L$Feb
等或L[[1]]
,L[[2]]
等来引用任何特定月份的数据帧。
L <- split(DF, format(DF$Date, "%m"))
names(L) <- month.abb[as.numeric(names(L))]
尽管如上所述,不建议将它们复制到全局环境中
list2env(L, .GlobalEnv)