Мы можем связать data.frames с помощью bind_cols
(после преобразования столбцов factor
в character
), удалить столбец 'Cup', filter
строки, в которых 'id' из 'df1' только присутствующие, сгруппированные по 'id', summarise
строки, чтобы иметь одну строку не-NA элемента и вырезать last
строку
library(dplyr)
bind_rows(df1, df2, df3) %>%
select(-Cup) %>%
filter(id %in% df1$id) %>%
group_by(id) %>%
summarise_at(vars(-group_cols()), ~ if(all(is.na(.))) NA
else
last(na.omit(.)))
# A tibble: 4 x 5
# Groups: id [4]
# id Group Location Class Garden
# <int> <fct> <fct> <chr> <chr>
#1 1121 B O1 Y O11
#2 1141 M O4 N V19
#3 1166 P O9 N A11
#4 1196 K O3 N N20
данные
df1[2:3] <- lapply(df1[2:3], as.character)
df2[3:4] <- lapply(df2[3:4], as.character)
df3[3:4] <- lapply(df3[3:4], as.character)