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

杰森·艾兹卡恩斯

感觉这应该可以使用mutate_ator mutate(across(...)),但我不明白什么......

假设我们有以下内容。我包含了所需的输出desired,它是一个指标列,基于包含单词“test”的任何列是否具有NA值:

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 在一个管道中创建指标列

reprex 包( v2.0.0 )在 2021-08-29 创建的示例

马丁·盖尔

你可以用

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用dplyr来创建新列

如何使用 dplyr 使用行数据创建新列

每当列值更改时,如何使用“ dplyr”创建一个新组?

如何使用 dplyr Joins 更改/避免列中的 NA?

如何在整个列中使用dplyr来过滤NA

使用dplyr汇总各列的NA

如何按因子为第一个非 NA 组创建新列?

如何使用dplyr以R中其他两个列的出现为条件创建一个新列?

使用dplyr创建新列并使用阈值计数重复项

使用dplyr mutate基于列名的向量创建新列

在Dplyr中使用case_when难以创建新列

dplyr - 使用从列名设置的字段创建新列

使用dplyr将列集中的NA替换为另一列集中的值

如何在 dplyr 中点击并创建一个新列

使用dplyr创建一个新的按组标准化的列

如何使用dplyr创建一个平均数据为2列并由另一个变量分组的新数据框?

dplyr 根据某些条件创建新列

使用 R 根据列内容是否为“私有”创建一个新表

使用dplyr基于另一个向量替换每列NA

根据 R 中数据框中所有其他列中的字符串值,使用 dplyr 创建一个新列

使用 dplyr 动态创建列

如何删除特定行中带有 NA 的 dplyr 列?

如何用dplyr替换多列中的NA

使用dplyr对多列求和时忽略NA

在dplyr中基于vector创建新列

使用dplyr mutate和现有列的子字符串创建新列

如何使用 if 创建新列

使用其他列的最频繁字符串创建一个新列,忽略 NA

如何将Purrr中的map与dplyr :: mutate结合使用以基于列对创建多个新列