Подмножество данных в R за последние два месяца - PullRequest
0 голосов
/ 16 марта 2020

Привет, у меня есть датафрейм, например:

Order Number    Date
4378345         2020-01-02
4324375         2020-02-03

Теперь я хочу поднастроить этот фрейм данных только для заказов с датой, большей, чем последние 2 месяца от сегодняшней даты, чтобы при установке на автоматизацию закодируйте его автоматически за последние два месяца до даты.

Любая помощь будет оценена.

РЕДАКТИРОВАТЬ: мои извинения, я думаю, я должен был быть более ясным, как за последние два месяца, я имею в виду, если дата сегодня 2020-03-16, я хочу чтобы мои данные были с 2020-02-01 до даты

Ответы [ 5 ]

3 голосов
/ 16 марта 2020

Вы можете использовать пакет lubridate с чем-то вроде:

library(lubridate)

subset(yourDF, 
       Date >= (today() - months(2)))

[править: Ой, кто-то был быстрее)

3 голосов
/ 16 марта 2020
library(lubridate)
subset(your_data, Date > today() - months(2))

Предполагается, что ваш столбец даты уже относится к классу Date.

Как правило, месяцы не очень четко определены ... вы можете использовать более детерминированный критерий c , Например, что за 2 месяца до 28 апреля, 29 апреля, 30 апреля, 1 мая? Имейте в виду, что в феврале в этом году было 29 дней. Вы можете увидеть lubridate мнение с (as.Date("2020-04-28") + 0:3) - months(2), что составляет NA в случае 2020-04-30. Выполнение 60 дней до (Date > today() - days(60)) или других более четко определенных критериев даст вам больше согласованности.


До go с первого дня предыдущего месяца, используйте следующий код. Это четко определено, так как все месяцы имеют первый день.

subset(your_data, Date >= floor_date(today(), unit = "month") - months(1))
2 голосов
/ 16 марта 2020
time <- read.table(textConnection("
OrderNumber    Date
4378345 2020-01-02
4324375 2020-02-03"), header = TRUE)

time <- as.data.frame(time)

library(lubridate)
library(dplyr)

time2 <- time %>% 
            filter(Date >= today() - months(2))
2 голосов
/ 16 марта 2020
library(dplyr)
library(lubridate)

x <- tibble(Date = as_date(c("2020-01-02", "2020-02-03")))

x %>% filter(Date >= today() - months(2))
1 голос
/ 16 марта 2020

В базе R вы можете найти первое число за последний месяц, используя seq ( кредиты на @G.Grothendieck) и заменяя день первым с использованием strftime .

last.1st <- 
  as.Date(paste0(strftime(seq(today, length=2, by="-1 month")[2], format="%Y-%m"), "-01"))

Первое число текущего месяца может быть получено с помощью gsub и регулярных выражений.

curr.1 <- as.Date(gsub("\\d{2}$", "01", Sys.Date()))

Тогда подмножество, как обычно, является простым. Весь период:

dat[dat$date >= last.1, ]
#    order.num       date
# 18    432174 2020-02-01
# 19    432175 2020-02-03
# 20    432176 2020-02-05
# 21    432177 2020-02-07
# 22    432178 2020-02-09
# 23    432179 2020-02-11
# 24    432180 2020-02-13
# 25    432181 2020-02-15
# 26    432182 2020-02-17
# 27    432183 2020-02-19
# 28    432184 2020-02-21
# 29    432185 2020-02-23
# 30    432186 2020-02-25
# 31    432187 2020-02-27
# 32    432188 2020-02-29
# 33    432189 2020-03-02
# 34    432190 2020-03-04
# 35    432191 2020-03-06
# 36    432192 2020-03-08
# 37    432193 2020-03-10
# 38    432194 2020-03-12
# 39    432195 2020-03-14
# 40    432196 2020-03-16

И только за последний месяц:

dat[dat$date >= last.1 & dat$date <= curr.1, ]
#    order.num       date
# 18    432174 2020-02-01
# 19    432175 2020-02-03
# 20    432176 2020-02-05
# 21    432177 2020-02-07
# 22    432178 2020-02-09
# 23    432179 2020-02-11
# 24    432180 2020-02-13
# 25    432181 2020-02-15
# 26    432182 2020-02-17
# 27    432183 2020-02-19
# 28    432184 2020-02-21
# 29    432185 2020-02-23
# 30    432186 2020-02-25
# 31    432187 2020-02-27
# 32    432188 2020-02-29

Игрушечные данные

dat <- structure(list(order.num = c(432157, 432158, 432159, 432160, 
432161, 432162, 432163, 432164, 432165, 432166, 432167, 432168, 
432169, 432170, 432171, 432172, 432173, 432174, 432175, 432176, 
432177, 432178, 432179, 432180, 432181, 432182, 432183, 432184, 
432185, 432186, 432187, 432188, 432189, 432190, 432191, 432192, 
432193, 432194, 432195, 432196), date = structure(c(18259, 18261, 
18263, 18265, 18267, 18269, 18271, 18273, 18275, 18277, 18279, 
18281, 18283, 18285, 18287, 18289, 18291, 18293, 18295, 18297, 
18299, 18301, 18303, 18305, 18307, 18309, 18311, 18313, 18315, 
18317, 18319, 18321, 18323, 18325, 18327, 18329, 18331, 18333, 
18335, 18337), class = "Date")), class = "data.frame", row.names = c(NA, 
-40L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...