【问题标题】:Subset data frame based on multiple conditions [duplicate]基于多个条件的子集数据框[重复]
【发布时间】:2011-12-21 18:04:53
【问题描述】:

我希望根据几列中的条件过滤数据框。例如,如果列 A = B 和列 E = 0,我如何删除行。

【问题讨论】:

标签: r dataframe subset


【解决方案1】:

逻辑索引:

d<-d[!(d$A=="B" & d$E==0),]

【讨论】:

  • 我尝试了很多复杂的答案——没有一个奏效。您的解决方案既简单又出色。
  • 其实更简单的查看方式是:foo.isolated &lt;- subset(foo, !(sid == "sid104" &amp; 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 全部为FALSEwhich(y) 将是integer(0) 并且-integer(0) 仍然是integer(0),所以你会得到否值,而不是所有值。一般来说,避免从逻辑子集切换到整数子集,除非您需要,例如,第一个或最后一个 TRUE 值。"
猜你喜欢
  • 2018-12-06
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多