通过要删除的行的多个逻辑条件来子集数据帧

通过要删除的行的多个逻辑条件来子集数据帧

我想通过指定哪些行not(!)保留在新数据帧中来对数据帧进行子集化(过滤)。这是一个简化的示例数据帧:


data

v1 v2 v3 v4

a  v  d  c

a  v  d  d

b  n  p  g

b  d  d  h    

c  k  d  c    

c  r  p  g

d  v  d  x

d  v  d  c

e  v  d  b

e  v  d  c

例如,如果列v1的一行有“b”,“d”或“e”,我想摆脱那一行观察,产生以下数据帧:


v1 v2 v3 v4

a  v  d  c

a  v  d  d

c  k  d  c    

c  r  p  g

我一次成功地基于一个条件进行子集化。例如,在这里我删除v1包含“b”的行:


sub.data <- data[data[ , 1] != "b", ]

但是,我有很多这样的条件,所以一次做一个是不可取的。我没有成功完成以下任务:


sub.data <- data[data[ , 1] != c("b", "d", "e")

要么


sub.data <- subset(data, data[ , 1] != c("b", "d", "e"))

我也试过了其他一些东西,比如!%in%,但似乎并不存在。有任何想法吗?


万千封印
浏览 491回答 3
3回答

慕无忌1623718

试试这个subset(data,&nbsp;!(v1&nbsp;%in%&nbsp;c("b","d","e")))

一只萌萌小番薯

您还可以通过包含&分隔语句来将事物分解为单独的逻辑语句来实现此目的。subset(my.df,&nbsp;my.df$v1&nbsp;!=&nbsp;"b"&nbsp;&&nbsp;my.df$v1&nbsp;!=&nbsp;"d"&nbsp;&&nbsp;my.df$v1&nbsp;!=&nbsp;"e")这不是优雅的,需要更多代码,但对于较新的R用户可能更具可读性。正如上面的评论所指出的,subset是一种“便利”功能,最适合在交互式工作时使用。
打开App,查看更多内容
随时随地看视频慕课网APP