gpt4 book ai didi

r - 可以关注多列时过滤行

转载 作者:行者123 更新时间:2023-12-01 21:30:56 25 4
gpt4 key购买 nike

我有这个数据:

# A tibble: 20 x 6
ID style param1 param2 param3 param4
<dbl> <chr> <chr> <chr> <chr> <chr>
1 1 ar R78 NA NA NA
2 2 bg NA NA NA NA
3 3 bh NA NA NA NA
4 4 ar NA R78 NA NA
5 5 bg NA NA NA NA
6 6 bh NA NA NA NA
7 7 ar R78 NA NA NA
8 8 bg NA NA R78 NA
9 9 bh NA NA NA NA
10 10 ar NA R78 NA NA
11 11 bg NA NA NA NA
12 12 bh NA NA R78 NA
13 13 ar NA NA NA NA
14 14 bg R78 NA NA NA
15 15 bh NA NA NA NA
16 16 ar NA NA NA NA
17 17 bg NA NA NA NA
18 18 bh R78 NA NA NA
19 19 ar NA NA NA R78
20 20 bg NA NA NA NA

当 R78 在列 param1、param2、param3 或 param4 中时,我想使用 dplyr::filter 选择行

我尝试:

data %>%
filter(across(param1:param4) == "R78")

返回我:

# A tibble: 4 x 6
ID style param1 param2 param3 param4
<dbl> <chr> <chr> <chr> <chr> <chr>
1 1 ar R78 NA NA NA
2 7 ar R78 NA NA NA
3 14 bg R78 NA NA NA
4 18 bh R78 NA NA NA

这与我执行 data %>% filter(param1 == "R78")

时相同

...

也许我误用了“交叉”功能。我试过多个“|”但从不工作:/

我对我的代码的期望是它必须返回第 1、4、7、10、12、14 行的小标题;仅限 18 岁和 19 岁:/

谢谢你!

最佳答案

across 按列工作。在这种情况下,我认为最好使用 filter_at :

library(dplyr)
df %>% filter_at(vars(param1:param4), any_vars(. == 'R78'))

# ID style param1 param2 param3 param4
#1 1 ar R78 <NA> <NA> <NA>
#4 4 ar <NA> R78 <NA> <NA>
#7 7 ar R78 <NA> <NA> <NA>
#8 8 bg <NA> <NA> R78 <NA>
#10 10 ar <NA> R78 <NA> <NA>
#12 12 bh <NA> <NA> R78 <NA>
#14 14 bg R78 <NA> <NA> <NA>
#18 18 bh R78 <NA> <NA> <NA>
#19 19 ar <NA> <NA> <NA> R78

使 across 工作的一个技巧是使用 Reduce :

df %>% filter(Reduce(`|`, across(param1:param4, ~. == 'R78')))

在基础 R 中,您可以使用 rowSums :

cols <- paste0('param', 1:4)
df[rowSums(df[cols] == 'R78', na.rm = TRUE) > 0, ]

关于r - 可以关注多列时过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62449210/

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