найдите значение, наиболее удаленное вправо в таблице r

#r #dplyr

Вопрос:

Допустим, у меня есть кое-какие данные:

 data <- tibble(A = c("a", "b", "c", "d"),
           B = c("e", "f", "g", NA_character_),
           C = c("h", "i", NA_character_, NA_character_))
 

Что выглядит примерно так:

 # A tibble: 4 x 3
  A     B     C    
  <chr> <chr> <chr> 
1 a     e     h    
2 b     f     i    
3 c     g     NA   
4 d     NA    NA
 

Что я хотел бы сделать, так это поместить значение, которое находится дальше всего справа, в новый столбец:

 # A tibble: 4 x 4
  A     B     C     D    
  <chr> <chr> <chr> <chr>
1 a     e     h     h    
2 b     f     i     i    
3 c     g     NA    g    
4 d     NA    NA    d    
 

Я знаю, что мог бы сделать это с case_when помощью кучи логических !is.na(A) ~ A, утверждений, но, скажем, у меня куча столбцов, а это невозможно. Я чувствую, что, вероятно, есть простой способ, о котором я просто не знаю и не смог найти. Спасибо

Ответ №1:

coalesce было бы проще

 library(dplyr)
data %>% 
    mutate(D = coalesce(C, B, A))
 

-выход

 # A tibble: 4 x 4
#  A     B     C     D    
#  <chr> <chr> <chr> <chr>
#1 a     e     h     h    
#2 b     f     i     i    
#3 c     g     <NA>  g    
#4 d     <NA>  <NA>  d    
 

Или, если столбцов много, rev имена столбцов преобразуйте в sym bols и оцените ( !!! )

 data %>%
     mutate(D = coalesce(!!! rlang::syms(rev(names(.)))))