基于多个条件的子集数据框[重复]
Posted
技术标签:
【中文标题】基于多个条件的子集数据框[重复]【英文标题】:Subset data frame based on multiple conditions [duplicate] 【发布时间】:2011-12-21 18:04:53 【问题描述】:我希望根据几列中的条件过滤数据框。例如,如果列 A = B 和列 E = 0,我如何删除行。
【问题讨论】:
像这样改变 Q 不是一个好主意——旧的答案会失效并且会带来混乱。以后尝试提出新问题。 相关:***.com/questions/6650510/… 【参考方案1】:逻辑索引:
d<-d[!(d$A=="B" & d$E==0),]
【讨论】:
我尝试了很多复杂的答案——没有一个奏效。您的解决方案既简单又出色。 其实更简单的查看方式是:foo.isolated <- subset(foo, !(sid == "sid104" & game.num == 7))
为什么仍然包括 NA
NA's 杀死了我的两个小时 :D 请注意,它也会选择 NA's【参考方案2】:
子集是您最安全、最简单的答案。
subset(dataframe, A==B & E!=0)
mtcars 的真实数据示例
subset(mtcars, cyl==6 & am!=0)
【讨论】:
第二个很好的例子是过滤值列表。即 cyl 的 mtcars 子集不在 c(100, 200, 500) 中【参考方案3】:使用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, ]
【讨论】:
-1。不要为此使用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 值。"以上是关于基于多个条件的子集数据框[重复]的主要内容,如果未能解决你的问题,请参考以下文章