Удалить определенные дни из месяца - PullRequest
0 голосов
/ 02 мая 2018

Я ищу код, который дает мне только строки, содержащие первый день каждого месяца

 (`1999-01-01`, `1999-02-01`, ..., `2010-11-01`, `202010-12-01`).

У кого-нибудь есть идеи, как это решить?

Буду очень признателен за вашу помощь!

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Вы можете использовать индексирование, создавая логический индекс, чтобы показать, какие записи в кадре данных являются первыми месяца. Используйте seq.Date для создания индекса:

# create index
ind <- seq.Date(as.Date("2008-01-01"), as.Date("2017-12-01"), by = "month")
# index the dataframe 
df2 <- df[df[, 1] %in% ind, ]

Это берет строки, где записи в df находятся в векторе ind. Для чего это стоит, этот подход незначительно (15%) быстрее, чем подход subset.


# dummy data 
df <- data.frame("x" = seq.Date(as.Date("2008-01-01"), as.Date("2017-12-01"), by = "day"))
0 голосов
/ 02 мая 2018

Опираясь на ответ Эрика Корнета, вы можете создать последовательность, а затем использовать ее для фильтрации нужных вам строк. Предполагая, что фрейм данных с именем x с переменной даты:

myseq <- seq(as.Date("2008-01-01"), as.Date("2017-12-01"), by= "month")
for(k in 1:length(myseq)){
  temp <- (x[x$date==myseq[k],])
  x3 <- rbind(x3, temp)
}
0 голосов
/ 02 мая 2018

Если ваш столбец даты правильно отформатирован как объект даты, вы можете задать для своего фрейма данных условие, чтобы столбец date приходился на первое число месяца, например:

dates_i_want <- seq.Date(as.Date("2008-01-01"), as.Date("2017-12-01"), by = "month")
result <- subset(data, date %in% dates_i_want)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...