【发布时间】:2019-05-28 15:07:09
【问题描述】:
我有一个数据框,其中包含一个变量,如果它们与另一个变量中的元素匹配,则要删除的元素 - 请参见下面的小示例:
df <- data.frame(pair = c(1, 1, 2, 2, 3, 3),
animal = rep(c("dog", "cat"), 3),
value = seq(1, 12, 2),
drop = c("no", "no", "dog", "dog", "cat", "cat"))
pair animal value drop
1 1 dog 1 no
2 1 cat 3 no
3 2 dog 5 dog
4 2 cat 7 dog
5 3 dog 9 cat
6 3 cat 11 cat
我试图根据animal 的值是否与drop 的值匹配来过滤数据框。我想要filter(df, animal != drop) 之类的东西来删除只有animal 的值与drop 的值匹配的行:
pair animal value drop
1 1 dog 1 no
2 1 cat 3 no
4 2 cat 7 dog
5 3 dog 9 cat
我还尝试编写一个简单的循环来测试动物匹配是否为每一行删除,如果为真则删除该行,但我无法让它工作。 (我对循环不是很有信心,如果可能的话,我宁愿不使用循环,因为我的数据框非常大,但我越来越绝望了!)
for(i in nrow(df)){
if(df$animal[i] == df$drop[i]){
df <- df[-i,]
return(df)
}
}
有没有办法使用 dplyr 做到这一点?
【问题讨论】: