这句话稍微有点难表述,就我所看到的,类似的问题都没有回答我的困惑。
我有一个数据框,如下所示:
df1 <- data.frame(id = rep(c("a", "b","c"), each = 4),
val = c(NA, NA, NA, NA, 1, 2, 2, 3,NA,2,NA,3))
df1
id val
1 a NA
2 a NA
3 a NA
4 a NA
5 b 1
6 b 2
7 b 2
8 b 3
9 c NA
10 c 2
11 c NA
12 c 3
我希望摆脱所有的NA值(可以使用filter()很容易实现),但要确保如果这样做删除了某个id值的所有数据(在此例中,删除了所有"a"的实例),则插入一个额外的行 (例如 a = 0)。
因此,最终结果为:
id val
1 a 0
2 b 1
3 b 2
4 b 2
5 b 3
6 c 2
7 c 3
显然有一种绕弯的方法可以做到这一点,但我想知道是否有一种简洁/优雅的方法来做到这一点。我想使用tidyr::complete()可能会有所帮助,但不确定如何在这种情况下应用它
我不关心行的顺序
干杯!
编辑:更新了更清晰的期望输出。之前提交的答案可能不太清晰
df1 <- data.frame(id = rep(c("a", "b","c"), each = 4), val = c(NA, NA, NA, NA, 1, 2, 2, 3,NA,2,NA,3))
更新您的问题并提供预期的输出?感谢 @VivekKalyanarangan 提供数据。 - markus