gpt4 book ai didi

r - 在 dplyr 1.0.0 中,编写逻辑析取的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 13:32:41 25 4
gpt4 key购买 nike

我目前正在编写我的 R 脚本,所以我并不是真的在 tidyverse 之外寻找答案或使用已弃用/取代的语法。我发现 dplyr 处理数据的方式很容易读写,所以我尽量坚持下去。
使用 iris 数据集,这里是我想要做的简化版本,在被取代的语法中(工作正常):

filter_at(iris, vars(starts_with("sepal")), any_vars(. > 3))
显然,我可以将条件写成长格式以避免使用 filter_at()any_vars() :
filter(iris, Sepal.Length > 3 | Sepal.Width > 3)
但它是多余的,而且大多数情况下,如果像在我的情况下,列名不完全已知,则不适用。
在 dplyr 的 vignette("colwise") ,它指出:

Previously, filter() was paired with the all_vars() and any_vars() helpers. Now, across() is equivalent to all_vars(), and there’s no direct replacement for any_vars(). However you can make a simple helper yourself:


接下来是一个非常简单的例子(任何值 > 0,所以我们只需要使用 rowSums() )。我觉得它缺少 across() 的分离版本在过滤的特定情况下保持相同的表现力。
在您看来,在不必枚举所有列或使用被取代的函数的情况下实现相同过滤的最简洁的语法是什么?

最佳答案

我们可以使用 filteracrossreduce

library(dplyr)
library(purrr)
iris %>%
filter(across(starts_with("sepal"), ~ . > 5) %>% reduce(`|`))
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 5.4 3.9 1.7 0.4 setosa
#3 5.4 3.7 1.5 0.2 setosa
#4 5.8 4.0 1.2 0.2 setosa
#5 5.7 4.4 1.5 0.4 setosa
#6 5.4 3.9 1.3 0.4 setosa
#7 5.1 3.5 1.4 0.3 setosa
# ...

关于r - 在 dplyr 1.0.0 中,编写逻辑析取的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62704059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com