filter_at 在过滤任何不符合条件的变量时不起作用
filter_at does not work when filtering for any variable that does NOT meet a criteria
我正在尝试使用 dplyr 的 filter_at 来过滤掉任何在任何时候被终止的人。但是,它一直给我错误的答案。
这是一个示例数据集:
problem <- tibble(name = c("Sally", "Frank", "Joe"),
status1 = c("On Staff", "On Staff", "On Staff"),
status2 = c("On Staff", "Term", "On Staff"),
status3 = c("On Staff", "Term", "Term"),
status4 = c("Promoted", "Rehired", "Term"))
如您所见,我有很多以 status 开头的变量,所以我尝试了 filter_at 所有包含 status 的变量:
problem %>%
filter_at(vars(contains("status")), any_vars(. != "Term))
不幸的是,它产生了这个无用的结果:
# A tibble: 3 x 5
name status1 status2 status3 status4
<chr> <chr> <chr> <chr> <chr>
1 Sally On Staff On Staff On Staff Promoted
2 Frank On Staff Term Term Rehired
3 Joe On Staff On Staff Term Term
相反,我希望最终产品看起来像这样:
# A tibble: 1 x 5
name status1 status2 status3 status4
<chr> <chr> <chr> <chr> <chr>
1 Sally On Staff On Staff On Staff Promoted
我做错了什么?
我们可以用all_vars
代替any_vars
,条件相同。它检查一行中的每一列是否没有 'Term' 元素,如果所有列都没有,则 return 该行
problem %>%
filter_at(vars(contains("status")), all_vars(. != "Term"))
# A tibble: 1 x 5
# name status1 status2 status3 status4
# <chr> <chr> <chr> <chr> <chr>
#1 Sally On Staff On Staff On Staff Promoted
在 OP 的代码中,any_vars
正在检查每行中的任何列是否没有 "Term" 并且在所有行中都满足
我正在尝试使用 dplyr 的 filter_at 来过滤掉任何在任何时候被终止的人。但是,它一直给我错误的答案。
这是一个示例数据集:
problem <- tibble(name = c("Sally", "Frank", "Joe"),
status1 = c("On Staff", "On Staff", "On Staff"),
status2 = c("On Staff", "Term", "On Staff"),
status3 = c("On Staff", "Term", "Term"),
status4 = c("Promoted", "Rehired", "Term"))
如您所见,我有很多以 status 开头的变量,所以我尝试了 filter_at 所有包含 status 的变量:
problem %>%
filter_at(vars(contains("status")), any_vars(. != "Term))
不幸的是,它产生了这个无用的结果:
# A tibble: 3 x 5
name status1 status2 status3 status4
<chr> <chr> <chr> <chr> <chr>
1 Sally On Staff On Staff On Staff Promoted
2 Frank On Staff Term Term Rehired
3 Joe On Staff On Staff Term Term
相反,我希望最终产品看起来像这样:
# A tibble: 1 x 5
name status1 status2 status3 status4
<chr> <chr> <chr> <chr> <chr>
1 Sally On Staff On Staff On Staff Promoted
我做错了什么?
我们可以用all_vars
代替any_vars
,条件相同。它检查一行中的每一列是否没有 'Term' 元素,如果所有列都没有,则 return 该行
problem %>%
filter_at(vars(contains("status")), all_vars(. != "Term"))
# A tibble: 1 x 5
# name status1 status2 status3 status4
# <chr> <chr> <chr> <chr> <chr>
#1 Sally On Staff On Staff On Staff Promoted
在 OP 的代码中,any_vars
正在检查每行中的任何列是否没有 "Term" 并且在所有行中都满足