Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于向量中的值筛选数据帧行_R_Dataframe_Subset - Fatal编程技术网

R 基于向量中的值筛选数据帧行

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", "

当要删除的值存储在向量中时,从数据帧中筛选行的最佳方法是什么?在我的例子中,我有一个带有日期的列,希望删除几个日期

我知道如何使用!=,删除一天对应的行,e、 g:

要删除向量中指定的几个日期,我尝试:

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类中时,这似乎不起作用!