R 基于向量中的值筛选数据帧行
当要删除的值存储在向量中时,从数据帧中筛选行的最佳方法是什么?在我的例子中,我有一个带有日期的列,希望删除几个日期 我知道如何使用!=,删除一天对应的行,e、 g: 要删除向量中指定的几个日期,我尝试:R 基于向量中的值筛选数据帧行,r,dataframe,subset,R,Dataframe,Subset,当要删除的值存储在向量中时,从数据帧中筛选行的最佳方法是什么?在我的例子中,我有一个带有日期的列,希望删除几个日期 我知道如何使用!=,删除一天对应的行,e、 g: 要删除向量中指定的几个日期,我尝试: m[m$date != c("01/31/11", "01/30/11"), ] 但是,这会生成一条警告消息: Warning message: In `!=.default`(m$date, c("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
基于多个值应用过滤器的正确方法是什么?我认为您需要:
m[!m$date %in% c("01/31/11","01/30/11"),]
我认为你想要的是:
m[!m$date %in% c("01/31/11","01/30/11"),]
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"
不用说,这颗小宝石现在在我的电脑里,经常使用 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"
不用说,这颗小宝石现在在我的电脑里,经常使用 最酷的方法是使用否定函数创建新函数:
`%ni%` <- Negate(`%in%`)
然后您可以使用它来查找不相交的元素最酷的方法是使用否定函数来创建新的元素:
`%ni%` <- Negate(`%in%`)
然后您可以使用它查找不相交的元素关于上面的一些问题,这里有一个符合tidyverse的解决方案。我使用dplyr中的anti_join实现了相同的效果:
library(tidyverse)
numbers <- tibble(numbers = c(1:10))
numbers_to_remove <- tibble(number = c(3, 4, 5))
numbers %>%
anti_join(numbers_to_remove)
关于上面的一些问题,这里有一个符合tidyverse的解决方案。我使用dplyr中的anti_join实现了相同的效果:
library(tidyverse)
numbers <- tibble(numbers = c(1:10))
numbers_to_remove <- tibble(number = c(3, 4, 5))
numbers %>%
anti_join(numbers_to_remove)
美好的我总是发现当我必须输入这样的东西时,它会打断我的注意力!x%在%y中。。。很好的提示。我不认为dplyr可以处理这个问题,例如filterdf,foo%notin%ca,c,eIt只是一个注释!我试图在一个筛选器调用中使用%noin%,但它没有起作用,毫无疑问。@MattO'Brien,我在下面发布了一个使用anti_join的等效程序。美好的我总是发现当我必须输入这样的东西时,它会打断我的注意力!x%在%y中。。。很好的提示。我不认为dplyr可以处理这个问题,例如filterdf,foo%notin%ca,c,eIt只是一个注释!我试图在一个筛选器调用中使用%noin%,但它没有起作用,毫无疑问。@MattO'Brien,我在下面发布了一个使用anti_join的等效程序。当date在as.POSIXct类中时,这似乎不起作用!当date在as.POSIXct类中时,这似乎不起作用!