【发布时间】:2021-05-19 08:04:31
【问题描述】:
我有一个长格式的数据框,每个 id 包含多个条目。我还有一个条件列,它可以是“应用条件”、“控制条件”或 NA。每个 id 至少有一个“应用条件”或“控制条件”条目,但通常其余的都是 NA。现在我需要过滤掉所有属于 app 条件的 id 行。所以我需要类似:if condition == "App condition" for id 5,删除 id 5 的所有行。
我的 df 看起来像这样:
| ID | Condition | .... |
|---|---|---|
| A | App condition | |
| A | NA | |
| A | NA | |
| B | Control condition | |
| B | NA | |
| B | Control condition | |
| C | NA | |
| C | App condition | |
| D | NA | |
| D | Control condition |
我想保留所有至少有一个“控制条件”条目的 ID。所以基本上是这样的:
| ID | Condition | .... |
|---|---|---|
| B | Control condition | |
| B | NA | |
| B | Control condition | |
| D | NA | |
| D | Control condition |
到目前为止,我的方法是使用 dplyr 和
df <- df %>%
group_by(id) %>%
filter(any(condition != "App condition")|is.na(condition))
但这仍然会返回属于应用条件的 ID,只是删除了这些行,以便相同 ID 的 NA 行仍然保留在数据框中。
有人可以帮忙吗?
非常感谢!
【问题讨论】:
-
能否使用
which为条件为TRUE时创建索引,然后将索引传递给filter? -
你能添加代码行吗?我只是从更高级的 R 东西开始,还没有真正掌握过滤器和过滤器:)
标签: r filter dplyr long-integer