我有一个可用于以下字段的数据集(请参阅数据库: 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(),但仍然无法使用。
我错过了上面的代码吗?
谢谢。
答案 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"))