从数据框中删除多个元素的最佳方法是什么?在我的情况下,我在数据框架中拥有该月的所有日期,并且想要删除几天。像下面这样的东西可以运行一天。
m[m$date!="01/31/11",]
但是,如果我尝试类似
的话m[m$date!=c("01/31/11","01/30/11"),]
我收到一条警告信息
Warning message:
In `!=.default`(m$date, c("01/31/11", "01/30/11")) :
longer object length is not a multiple of shorter object length
Calls: [ ... [.data.frame -> Ops.dates -> NextMethod -> Ops.times -> NextMethod
它似乎工作了两天,但如果我将01/29/11添加到矢量,它显示所有日子,但是01/31/11。
答案 0 :(得分:35)
nzcoops是他的建议。我在R聊天中提出了这个问题,Paul Teetor建议定义一个新功能:
`%notin%` <- function(x,y) !(x %in% y)
然后可以按如下方式使用:
foo <- letters[1:6]
> foo[foo %notin% c("a", "c", "e")]
[1] "b" "d" "f"
毋庸置疑,这个小宝石现在已经在我的R profile中并经常使用。
答案 1 :(得分:13)
我认为你想要的是:
m[!m$date %in% c("01/31/11","01/30/11"),]
答案 2 :(得分:2)
`%ni%` <- Negate(`%in%`)
比使用它来查找不相交的元素
答案 3 :(得分:0)
关于上述某些问题,这是一个符合tidyverse
的解决方案。我使用了anti_join
中的dplyr
来达到相同的效果:
library(tidyverse)
numbers <- tibble(numbers = c(1:10))
numbers_to_remove <- tibble(number = c(3, 4, 5))
numbers %>%
anti_join(numbers_to_remove)