我们假设我有这个数据帧:
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
我看到this堆栈溢出解决了使用键值折叠的问题,但我找不到使用关闭日期值折叠的类似情况。
Obs1 :如果日期相距太远(例如:相隔超过15天),如果有办法不折叠行会很好。
Obs2 :如果折叠线保留后一个日期而不是更早的日期会很好,如上例所示。
答案 0 :(得分:0)
使用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)