Объедините несколько строк по группе и сохраните в списке первое значение в каждом столбце, не являющееся NA, в R - PullRequest
1 голос
/ 27 мая 2020

Мой data.frame выглядит как

ID  Encounter  Value1  Value2
1      A         1       NA
1      A         2       10
1      B         NA      20
1      B         4       30
2      A         5       40
2      A         6       50
2      B         NA      NA
2      B         7       60

, и я хочу, чтобы он выглядел как

ID    Encounter  Value1  Value2
1        A        1       10
1        B        4       20       
2        A        5       40
2        B        7       60

1 Ответ

1 голос
/ 27 мая 2020

Мы можем использовать dplyr. Сгруппированные по ID, Encounter, получите значение first, которое не является NA (!is.na(.)) в остальной части столбца. По любому каналу, если все значения - Н / Д, вернуть NA

library(dplyr)
df1 %>% 
  group_by(ID, Encounter) %>%
  summarise_at(vars(-group_cols()), ~ if(all(is.na(.))) NA_integer_ 
           else first(.[!is.na(.)]))
# A tibble: 4 x 4
# Groups:   ID [2]
#     ID Encounter Value1 Value2
#  <int> <chr>      <int>  <int>
#1     1 A              1     10
#2     1 B              4     20
#3     2 A              5     40
#4     2 B              7     60

данные

df1 <- structure(list(ID = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), 
Encounter = c("A", 
"A", "B", "B", "A", "A", "B", "B"), Value1 = c(1L, 2L, NA, 4L, 
5L, 6L, NA, 7L), Value2 = c(NA, 10L, 20L, 30L, 40L, 50L, NA, 
60L)), class = "data.frame", row.names = c(NA, -8L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...