#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(.)))))