【发布时间】:2011-12-21 18:04:53
【问题描述】:
我希望根据几列中的条件过滤数据框。例如,如果列 A = B 和列 E = 0,我如何删除行。
【问题讨论】:
-
像这样改变 Q 不是一个好主意——旧的答案会失效并且会带来混乱。以后尝试提出新问题。
我希望根据几列中的条件过滤数据框。例如,如果列 A = B 和列 E = 0,我如何删除行。
【问题讨论】:
逻辑索引:
d<-d[!(d$A=="B" & d$E==0),]
【讨论】:
foo.isolated <- subset(foo, !(sid == "sid104" & game.num == 7))
子集是您最安全、最简单的答案。
subset(dataframe, A==B & E!=0)
mtcars 的真实数据示例
subset(mtcars, cyl==6 & am!=0)
【讨论】:
使用which函数:
A <- c('a','a','b','b','b')
B <- c(1,0,1,1,0)
d <- data.frame(A, B)
r <- with(d, which(B==0, arr.ind=TRUE))
newd <- d[-r, ]
【讨论】:
which。将条件更改为B==2,看看它是否给出了您想要的答案。参见,例如,rwiki.sciviews.org/…
which from Advanced R:“有两个重要的区别。首先,当逻辑向量包含NA时,逻辑子集将这些值替换为NA而which()丢弃第二,x[-which(y)] 不等于x[!y]:如果y 全部为FALSE,which(y) 将是integer(0) 并且-integer(0) 仍然是integer(0),所以你会得到否值,而不是所有值。一般来说,避免从逻辑子集切换到整数子集,除非您需要,例如,第一个或最后一个 TRUE 值。"