【问题标题】:How do I process an entire row when using rowwise()?使用 rowwise() 时如何处理整行?
【发布时间】:2021-11-02 03:27:49
【问题描述】:

我的数据集由数字列组成,其中有一些缺失(即 NA)值。我想找到包含完全 NA 值的行。例如:

library(tidyverse)
library(magrittr)

frm <- tribble(
  ~A, ~B, ~C,
  11, 22, 33,
  14, NA, 37,
  10, 29, 36,
  NA, NA, NA,
  18, 28, 38
)

我可以使用 is.na() 和 all() 在 for 循环中处理每一行,但我想找到一个“整洁”的解决方案。这是我能做的最好的:

frm %>%
 rowwise %>%
 summarize(all_values_missing = is.na(A) & is.na(B) & is.na(C))

但这种方法无法扩展到具有大量列和重要列名的数据集。任何想法将不胜感激!

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    使用c_across 函数提供帮助。例如

    frm %>%
      rowwise %>%
      summarize(all_values_missing = all(is.na(c_across())))
    

    如果您只需要列的子集,c_across() 也将接受整洁的选择器。

    【讨论】:

    • 这个解决方案最符合我提出问题的方式:显式使用 rowwise()。
    【解决方案2】:

    dplyr 包具有一些旨在快速处理逐行逻辑操作的功能(if_anyif_all)。 对于这个问题,我们可以使用任何一个。不需要rowwise

    library(dplyr)
    
    frm %>% mutate(all_values_missing = if_all(everything(), is.na))
    
    # A tibble: 5 × 4
          A     B     C all_values_missing
      <dbl> <dbl> <dbl> <lgl>             
    1    11    22    33 FALSE             
    2    14    NA    37 FALSE             
    3    10    29    36 FALSE             
    4    NA    NA    NA TRUE              
    5    18    28    38 FALSE 
    

    【讨论】:

      【解决方案3】:

      你希望你的返回值是多少?

      您可以使用pmap_lgl 逐行迭代您的数据帧并返回该行是否全部为 NA 的逻辑向量:

      > pmap_lgl(frm, ~all(is.na(.x)))
      [1] FALSE FALSE FALSE  TRUE FALSE
      

      您可以通过以下方式以整洁的方式将其嵌入您的数据框中:

      > frm %>%
      +   mutate(all_na = pmap_lgl(., ~all(is.na(.x))))
      # A tibble: 5 × 4
            A     B     C all_na
        <dbl> <dbl> <dbl> <lgl> 
      1    11    22    33 FALSE 
      2    14    NA    37 FALSE 
      3    10    29    36 FALSE 
      4    NA    NA    NA TRUE  
      5    18    28    38 FALSE 
      

      【讨论】:

        猜你喜欢
        • 2021-11-09
        • 1970-01-01
        • 2019-09-28
        • 1970-01-01
        • 1970-01-01
        • 2015-06-28
        • 2019-06-23
        • 2018-01-21
        • 2022-12-23
        相关资源
        最近更新 更多