首页 > 解决方案 > 无法过滤 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() 但仍然对我不起作用。

我错过了上面的代码吗?

谢谢。

标签: rdplyr

解决方案


我们需要使用%in%andfilter而不是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"))

推荐阅读