无法过滤r中的文本数据(使用dplyr库)

时间:2018-12-27 11:38:32

标签: r dplyr

我有一个可用于以下字段的数据集(请参阅数据库: Sum2),并且我想将过滤器应用于“ var”列

数据库: Sum2

       IID var             Data
 1     993 A             804584
 2     993 G             455158
 3     993 A          640008724 
 4     993 M          900007602 
 5     993 T              40415
 6     993 R                884
 7     993 T              -1752
 8     993 R               1950
++++ More 5k field

下面是从上表中删除“ A”和“ M”数据的代码

library(dplyr)
noscope = c("A", "M")
sum2 %>% select(IID ,var ,Data) %>% Filter(var != noscope)

运行上述代码后收到以下错误:

Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'f' of mode 'function' was not found

我也曾在“ var”列上尝试过as.character(),但仍然无法使用。

我错过了上面的代码吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

我们需要使用%in%filter而不是Filter

library(tidyverse)
Sum2 %>% 
    select(IID, var, Data) %>% 
    filter(!var %in% noscope)
#  IID var   Data
#1 993   G 455158
#2 993   T  40415
#3 993   R    884
#4 993   T  -1752
#5 993   R   1950

注意:Filter是一个base R函数,为此传递的参数是不同的。关于!=,当我们与单个字符串字符进行比较时,它可以工作。在这里,不止一个,所以我们用%in%进行检查,然后取反(!

数据

Sum2 <- structure(list(IID = c(993L, 993L, 993L, 993L, 993L, 993L, 993L, 
993L), var = c("A", "G", "A", "M", "T", "R", "T", "R"), Data = c(804584L, 
 455158L, 640008724L, 900007602L, 40415L, 884L, -1752L, 1950L)),
class =  "data.frame", row.names = c("1", 
 "2", "3", "4", "5", "6", "7", "8"))