Подмножество данных на основе даты (месяца) с использованием переменных - PullRequest
0 голосов
/ 04 декабря 2018

У меня очень большой фрейм данных, который я хотел бы разделить на месяцы, основываясь на столбце даты типа %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 голосов
/ 04 декабря 2018

Обычно лучше создать список фреймов данных, чем создавать бесплатные фреймы данных в глобальной среде.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)
...