簡體   English   中英

如果所有觀察結果均為 NA,則按行指示符

[英]Rowwise indicator if all observations are NA

我想指出給定行中的所有觀察結果是否都是NA 例如,使用以下數據:

dat <- tibble::tribble(
  ~x, ~y, ~z,
  1, 2, NA,
  1, 2, 3,
  NA, NA, NA,
  NA, NA, NA
)
dat

# A tibble: 4 x 3
      x     y     z
  <dbl> <dbl> <dbl>
1     1     2    NA
2     1     2     3
3    NA    NA    NA
4    NA    NA    NA

我想創建一個新列( allisna )來指示是否所有觀察結果都是 NA。 注意:我想使用dplyr來執行此操作(如果需要,可以使用其他tidyverse函數,而不是像apply()這樣的基本 R 函數。

我有以下解決方案,但我更喜歡在mutate內部使用rowwise()和另一個dplyr function 調用的解決方案。

library(dplyr)

dat %>%
  mutate(allisna = apply(tmp, 1, function(x){
    case_when(all(is.na(x)) ~ 1,
              TRUE ~ 0)
  }))

最終產品應該是:

# A tibble: 4 x 4
      x     y     z allisna
  <dbl> <dbl> <dbl>   <dbl>
1     1     2    NA       0
2     1     2     3       0
3    NA    NA    NA       1
4    NA    NA    NA       1

在基礎 R 不使用apply你可以做

dat$allisna <- +(rowSums(!is.na(dat)) == 0)

想出了一個解決方案(但我願意並且會獎勵更多:):

dat %>%
  rowwise() %>%
  mutate(allisna = case_when(all(is.na(c_across(everything()))) ~ 1,
                             TRUE ~ 0))

編輯以包括@RonakShah 的答案

dat %>%
  mutate(allisna = as.numeric(rowSums(!is.na(.)) == 0))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM