小编Phi*_*.He的帖子

R 中的最后一次观察结转和最后一次观察向后结转

我有一个看起来像这样的数据集

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”向后进行最后一次观察。

但是我如何连接这两个,以便使用这两个功能:

  • na.LOCF 如果第一个填充值之前没有 NA 值
  • na.LOCF(fromLast) 表示如果在第一个填充值之前有 NA 值,则向后移最后一个观察值。

提前非常感谢!

r dataframe zoo dplyr

1
推荐指数
1
解决办法
1881
查看次数

在 R 中的多行上过滤一个组

我有一个像这样的数据框,带有 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 …

if-statement group-by r filter dplyr

1
推荐指数
1
解决办法
45
查看次数

标签 统计

dplyr ×2

r ×2

dataframe ×1

filter ×1

group-by ×1

if-statement ×1

zoo ×1