【发布时间】:2018-05-19 10:17:49
【问题描述】:
这是我的数据:
df <- tibble::tribble(
~A, ~B, ~C, ~D,
2L, "a", "e", 2L,
4L, "a", "f", NA_integer_,
4L, "b", "g", NA_integer_,
4L, "b", "h", NA_integer_
)
df$B <- as.factor(df$B)
df$A <- as.factor(as.character(df$A))
这是我作为字符的过滤条件:
remove2 <- "as.integer(A)!=2L"
我只想用 A==2 删除观察结果,但下面的代码保留了它,为什么?
df %>% dplyr::filter_(remove2)
我想使用 filter_ 因为它接受条件作为字符。如果您可以建议过滤器(不带下划线版本)并将字符作为条件,那也可以。
【问题讨论】:
-
问题出在过滤器的 as.integer 部分。如果您执行 as.integer(df$A) ,则返回值为 1、2、2、2。而不是您期望的 2、4、4、4。见this SO post
-
我猜其他答案 cmets 间接说明了这一点 - 我可能会首先尝试避免因素。为什么不简单地将变量保存为字符/整数?您可以随时根据需要进行临时分解
-
出于好奇,为什么要将条件作为角色?您是否打算将此链接到某些用户输入或类似的内容?
-
@phiver 我不知道!很高兴知道。谢谢!
-
@camille 我认为 filter_ 会接受引用的表达式并解决问题。