【发布时间】:2021-02-23 02:21:39
【问题描述】:
我想根据数据框中其他列中的其他条目从数据框中删除某些行。例如,如果我有一个如下所示的数据框:
asd <- data.frame(
var_1 = as.factor(c("a1", "a2", "a3", "a1", "a2", "a3", "a1", "a2", "a3")),
var_2 = as.factor(c("a1", "a1", "a1", "a2", "a2", "a2", "a3", "a3", "a3")),
var_3 = c("NO", "YES","YES","YES","NO", "YES","YES","YES","NO"),
var_4 = c(0, 2, 4, 2, 0, 7, 4, 7, 0)
)
> asd
var_1 var_2 var_3 var_4
1 a1 a1 NO 0
2 a2 a1 YES 2
3 a3 a1 YES 4
4 a1 a2 YES 2
5 a2 a2 NO 0
6 a3 a2 YES 7
7 a1 a3 YES 4
8 a2 a3 YES 7
9 a3 a3 NO 0
我想删除 var_3 列中包含 NO 的每一行(幸运的是,NO 总是等间距的,所以我可以利用这一事实来帮助删除它们)
...而且我还想删除所有重复项。我所说的重复是指,例如,第 2 行有a2 和a1,第4 行有a1 和a2...这些行是彼此重复的。
为了实现这一点,我使用了以下代码:
# This line removes all the rows with NO
asdf <- asd[-seq(1, NROW(asd), by = 4), ]
# This line removes the duplicate rows
asdf <- asdf[!duplicated(t(apply(asdf, 1, sort))), ]
这会导致:
> asdf
var_1 var_2 var_3 var_4
2 a2 a1 YES 2
3 a3 a1 YES 4
6 a3 a2 YES 7
这正是我想要的结果……但我想知道是否有一种更简单、更简洁的方法来实现这个结果(最好使用基础 R……但这不是一个牢不可破的规则)?
非常感谢任何建议
【问题讨论】:
标签: r