R - сворачивание строк до ближайшей даты, когда NA - PullRequest
0 голосов
/ 11 мая 2018

Предположим, у меня есть этот фрейм данных:

Date        A   B
2010-01-01  NA  1
2010-01-02  2   NA
2010-01-05  3   NA
2010-01-07  NA  4
2010-01-20  5   NA
2010-01-25  6   7

Я хочу свернуть строки, удалив значения NA до ближайшей даты.Таким образом, результат будет:

Date        A  B
2010-01-02  2  1
2010-01-07  3  4
2010-01-20  5  NA
2010-01-25  6  7

Я видел это переполнение стека , которое решает свертывание с использованием ключевого значения, но я не смог найти аналогичный случай, когда значения даты закрытия закрываются.

Obs1 : Было бы хорошо, если бы был способ не сворачивать строки, если даты находятся слишком далеко друг от друга (например, с интервалом более 15 дней).

Obs2 : Было бы хорошо, если бы сворачивающиеся строки сохранили более позднюю дату, а не более раннюю, как показано в примере выше.

1 Ответ

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

При использовании пакета dplyr опция может быть group_by при комбинации A и B таким образом, что они образуют полные значения.

Учитывая Obs#2 max Даты должно быть взято для объединенной строки.

library(dplyr)
library(lubridate)
df %>% mutate(Date = ymd(Date)) %>%
  mutate(GrpA = cumsum(!is.na(A)), GrpB = cumsum(!is.na(B))) %>%
  rowwise() %>%
  mutate(Grp = max(GrpA, GrpB)) %>%
  ungroup() %>%
  select(-GrpA, -GrpB) %>%
  group_by(Grp) %>%
  summarise(Date = max(Date), A = A[!is.na(A)][1], B = B[!is.na(B)][1])

# # A tibble: 4 x 4
# Grp Date           A     B
# <int> <date>     <int> <int>
# 1     1 2010-01-02     2     1
# 2     2 2010-01-07     3     4
# 3     3 2010-01-20     5    NA
# 4     4 2010-01-25     6     7

Данные:

df <- read.table(text = 
"Date        A   B
2010-01-01  NA  1
2010-01-02  2   NA
2010-01-05  3   NA
2010-01-07  NA  4
2010-01-20  5   NA
2010-01-25  6   7",
stringsAsFactors = FALSE, header = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...