Удалите элементы NA из столбца векторов с помощью dplyr

#r #dplyr #purrr #pmap

Вопрос:

Я пытаюсь объединить столбцы в один столбец, я объединил их с помощью pmap .

В некоторых столбцах есть NAs, я хотел бы удалить NAs из объединенного столбца col_comb и оставить другие значения.

 df = tribble(~id, ~col1, ~col2, ~col3,
             1, "a", "b", "c",
             2, "a", NA, "c",
             3, "a", NA, NA,
             4, NA, NA, NA)
df = df %>% 
  mutate(col_comb = pmap(list(col1,col2,col3), c)) 
 

введите описание изображения здесь

Ответ №1:

Для этого мы можем указать лямбда-функцию

 library(dplyr)
library(purrr)
df1 <- df %>% 
    mutate(col_comb = pmap(select(., starts_with('col')), 
             ~  as.character(na.omit(c(...)))))
 

-выход

 df1$col_comb
#[[1]]
#[1] "a" "b" "c"

#[[2]]
#[1] "a" "c"

#[[3]]
#[1] "a"

#[[4]]
#character(0)
 

Или другой вариант- c_across с rowwise

 df %>% 
  rowwise %>% 
  mutate(col_comb = list(na.omit(c_across(-id)))) %>% 
  ungroup
 

Комментарии:

1. Спасибо! .. Знаешь что, я ждал тебя, когда писал это, и был уверен, что ты ответишь на это 🙂 Это отлично работает, и я могу применять операции со списком length first и т. Д.