klumbard:
のは、私は、次のデータフレームを持っているとしましょう:
mydat <- structure(list(Group = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 2L
), .Label = c("A", "B"), class = "factor"), Day = c(1, 2, 3,
1, 2, 3, 4), Var1 = c(2, 3, 5, 12, NA, NA, 51), Var2 = c(5, 6,
2, 0, 40, 50, 3)), class = "data.frame", row.names = c(NA, -7L
))
mydat
Group Day Var1 Var2
1 A 1 2 5
2 A 2 3 6
3 A 3 5 2
4 B 1 12 0
5 B 2 NA 40
6 B 3 NA 50
7 B 4 51 3
私は(好ましくはdplyrで)やりたいことはある:グループによって、行見つけVar1
ありNA
、そしてそれらの行を超えるを合計Var2
し、その中で次の行ではその合計含まれVar1
ていないがNA
。など:
mydat_new <- structure(list(Group = structure(c(1L, 1L, 1L, 2L, 2L), .Label = c("A",
"B"), class = "factor"), Day = c(1, 2, 3, 1, 4), Var1 = c(2,
3, 5, 12, 51), Var2 = c(5, 6, 2, 0, 93)), class = "data.frame", row.names = c(NA,
-5L))
mydat_new
Group Day Var1 Var2
1 A 1 2 5
2 A 2 3 6
3 A 3 5 2
4 B 1 12 0
5 B 4 51 93
そうではGroup
B、日間2及び3と行がなくなっている、と彼らのVar2
貢献は、その次の日に「吸収」されていVar1
ないがNA
、すなわち4日目。
arg0naut91:
1つのオプションは、次のようになります。
library(dplyr)
mydat %>%
group_by(Group, idx = rev(cumsum(rev(!is.na(Var1))))) %>%
mutate(Var2 = sum(Var2)) %>%
ungroup() %>%
filter(!is.na(Var1)) %>%
select(-idx)
出力:
# A tibble: 5 x 4
Group Day Var1 Var2
<fct> <dbl> <dbl> <dbl>
1 A 1 2 5
2 A 2 3 6
3 A 3 5 2
4 B 1 12 0
5 B 4 51 93