【发布时间】:2019-05-30 01:22:21
【问题描述】:
有点难以表达,据我所知,没有一个类似的问题能回答我的问题。
我有一个data.frame,例如:
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() 可能会有所帮助,但不完全确定如何将其应用于这样的案例
我不关心行的顺序
干杯!
编辑:更新为更清晰的所需输出。可能会使之前提交的期望答案不太清楚
【问题讨论】:
-
因此,只有当特定
id的所有值都为 0 时,您才想添加 0 行? -
仅当它们都是特定 id 的 NA 时
-
@RobertHickman 您想要的输出似乎有些混乱。您能否使用基于此
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 提供数据。