gpt4 book ai didi

r - 如何使用 dplyr 根据列的子集中的任何一个是否为 NA 创建新列

转载 作者:行者123 更新时间:2023-12-04 14:31:13 24 4
gpt4 key购买 nike

这感觉应该可以通过 mutate_at 实现或 mutate(across(...)) ,但我不明白什么......
假设我们有以下内容。我包括所需的输出 desired这是一个指标列,基于是否有任何包含单词“test”的列具有 NA值(value):

library(tidyverse)

df <- tibble::tribble(
~id, ~name, ~test_col, ~is_test, ~another_test, ~desired,
1L, "mickey", NA, 13L, 12L, 1L,
2L, "donald", 19L, NA, NA, 1L,
3L, "daisy", 15L, 20L, 20L, 0L,
4L, "goofy", 18L, 14L, 10L, 0L,
5L, "pluto", 16L, 10L, NA, 1L,
6L, "minnie", 19L, 15L, 16L, 0L
)

df
#> # A tibble: 6 x 6
#> id name test_col is_test another_test desired
#> <int> <chr> <int> <int> <int> <int>
#> 1 1 mickey NA 13 12 1
#> 2 2 donald 19 NA NA 1
#> 3 3 daisy 15 20 20 0
#> 4 4 goofy 18 14 10 0
#> 5 5 pluto 16 10 NA 1
#> 6 6 minnie 19 15 16 0
但实际上我们开始时没有 desired栏目: df_start <- df %>% select(-desired) .
我可以成功使用 fiter_at仅获取其中一列或多列包含“测试”的观察结果 NA :
df_start %>% 
filter_at(vars(contains("test")), any_vars(is.na(.)))
#> # A tibble: 3 x 5
#> id name test_col is_test another_test
#> <int> <chr> <int> <int> <int>
#> 1 1 mickey NA 13 12
#> 2 2 donald 19 NA NA
#> 3 5 pluto 16 10 NA
我可以保存这个子集,然后使用 bind_rows,但我想创建 desired在一个管道中的列。同样,这感觉应该可以通过 mutate_at 来实现。或 mutate(across(...))但我还没有成功。
问题:如何创建指标列 desired与 dplyr 在一个管道中?
示例于 2021-08-29 由 reprex package 创建(v2.0.0)

最佳答案

你可以用

library(dplyr)

df %>%
mutate(desired = +if_any(contains("test"), is.na))
要得到
# A tibble: 6 x 6
id name test_col is_test another_test desired
<int> <chr> <int> <int> <int> <int>
1 1 mickey NA 13 12 1
2 2 donald 19 NA NA 1
3 3 daisy 15 20 20 0
4 4 goofy 18 14 10 0
5 5 pluto 16 10 NA 1
6 6 minnie 19 15 16 0

关于r - 如何使用 dplyr 根据列的子集中的任何一个是否为 NA 创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68975499/

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