我有一个看起来像这样的数据集
df <- data.frame(ID=c(1,1,1,1,1,2,2,2,3,3), values=c(NA, NA, 12, 13, NA, 5, NA, NA, NA, 1))
Run Code Online (Sandbox Code Playgroud)
我想要这样的输出,以便最后的观察结果被向前推进(按组),除非在一个填充值之前只有 NA 值,那么我希望将最后的观察结果向后推进:
df <- data.frame(ID=c(1,1,1,1,1,2,2,2,3,3), values=c(12, 12, 12, 13, 13, 5, 5, 5, 1, 1))
Run Code Online (Sandbox Code Playgroud)
我一直在使用 Zoo 包中的 dplyr 和 na.locf 。到目前为止我的方法是这样的:
df%>%
group_by(PID%>%
mutate_all(funs(na.locf(., na.rm = FALSE)))
Run Code Online (Sandbox Code Playgroud)
然而,这只是最后的观察结果。na.locf 函数中的规范“fromLast”向后进行最后一次观察。
但是我如何连接这两个,以便使用这两个功能:
提前非常感谢!
我有一个像这样的数据框,带有 ID 和两个条件:
df <- data.frame(ID=c("A", "A", "A", "B", "C"), cond1=c("yes", "yes", "no", "no", "yes"), cond2=c("no", "no", "yes", "yes", "yes"))
df
ID cond1 cond2
1 A yes no
2 A yes no
3 A no yes
4 B no yes
5 C yes yes
Run Code Online (Sandbox Code Playgroud)
我想过滤适用 cond1 和 cond2 的 ID(=是),但它不必在同一行中为真。这意味着我想过滤掉 ID A 和 C,而不是 B。
我尝试使用 dplyr 对 group_by() 和 filter() 进行分组:
df %>%
group_by(PID)%>%
filter(cond1==yes&cond2==yes)
Run Code Online (Sandbox Code Playgroud)
但这只会过滤出一个 PID/行,其中 cond 1 和 cond 2 都适用(所以只有 ID C/行 5)。
我可以做些什么来按组过滤 PID/行,其中有两个条件,在一组中 t0 …