Заполните пропущенные диапазоны дат - PullRequest
0 голосов
/ 04 июля 2018

У меня есть следующий пример фрейма данных:

Date_from <- c("2013-01-01","2013-01-10","2013-01-16","2013-01-19")
Date_to <- c("2013-01-07","2013-01-12","2013-01-18","2013-01-25")
y <- data.frame(Date_from,Date_to)
y$concentration <- c("1.5","2.5","1.5","3.5")
y$Date_from <- as.Date(y$Date_from)
y$Date_to <- as.Date(y$Date_to)
y$concentration <- as.numeric(y$concentration)

Это измеренные концентрации тяжелых металлов для определенного диапазона дат. Однако диапазоны дат не являются последовательными, поскольку между 2013-01-07 по 2013-01-10 и 2013-01-12 по 2013-01-16 имеются разрывы. Мне нужно обнаружить эти пробелы, вставить строку после каждого пробела и заполнить пропущенный диапазон. Результат должен выглядеть так:

Date_from    Date_to concentration
2013-01-01 2013-01-07           1.5
2013-01-08 2013-01-09            NA
2013-01-10 2013-01-12           2.5
2013-01-13 2013-01-15            NA
2013-01-16 2013-01-18           1.5
2013-01-19 2013-01-25           3.5

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Вот решение, которое требует magrittr и dplyr. Он находит пробелы, затем перебирает их, чтобы заполнить.

# Locations to pad data frame
tmp <- which(y$Date_from-lag(y$Date_to) > 1) 
tmp <- tmp + (1:length(tmp)) - 1

for(i in tmp) {
  # Add row
  y %<>% add_row(Date_from = y$Date_to[i-1] + 1, 
                 Date_to = y$Date_from[i] - 1, 
                 .before = i)
}

#    Date_from    Date_to concentration
# 1 2013-01-01 2013-01-07           1.5
# 2 2013-01-08 2013-01-09            NA
# 3 2013-01-10 2013-01-12           2.5
# 4 2013-01-13 2013-01-15            NA
# 5 2013-01-16 2013-01-18           1.5
# 6 2013-01-19 2013-01-25           3.5
0 голосов
/ 04 июля 2018

Попробуйте это:

adding <- data.frame(Date_from = y$Date_to[-nrow(y)]+1,
                     Date_to = y$Date_from[-1]-1, concentration = NA)
adding <- adding[adding$Date_from <= adding$Date_to,]
res <- rbind(y,adding)
res[order(res$Date_from),]

#   Date_from    Date_to concentration
#1 2013-01-01 2013-01-07           1.5
#5 2013-01-08 2013-01-09            NA
#2 2013-01-10 2013-01-12           2.5
#6 2013-01-13 2013-01-15            NA
#3 2013-01-16 2013-01-18           1.5
#4 2013-01-19 2013-01-25           3.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...