为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

万千封印 2019-08-08 15:01:17
通过要删除的行的多个逻辑条件来子集数据帧我想通过指定哪些行not(!)保留在新数据帧中来对数据帧进行子集化(过滤)。这是一个简化的示例数据帧:datav1 v2 v3 v4a  v  d  ca  v  d  db  n  p  gb  d  d  h    c  k  d  c    c  r  p  gd  v  d  xd  v  d  ce  v  d  be  v  d  c例如,如果列v1的一行有“b”,“d”或“e”,我想摆脱那一行观察,产生以下数据帧:v1 v2 v3 v4a  v  d  ca  v  d  dc  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%,但似乎并不存在。有任何想法吗?

3 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

试试这个

subset(data, !(v1 %in% c("b","d","e")))


查看完整回答
反对 回复 2019-08-08
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

您还可以通过包含&分隔语句来将事物分解为单独的逻辑语句来实现此目的。

subset(my.df, my.df$v1 != "b" & my.df$v1 != "d" & my.df$v1 != "e")

这不是优雅的,需要更多代码,但对于较新的R用户可能更具可读性。正如上面的评论所指出的,subset是一种“便利”功能,最适合在交互式工作时使用。


查看完整回答
反对 回复 2019-08-08

添加回答

代码语言

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信