r - 'rbind' фреймы данных с другим префиксом в именах столбцов - PullRequest
3 голосов
/ 02 мая 2019

У меня есть два кадра данных, подобные следующему:

df1 <- data.frame(ID = c(1:4),
       Year = 2001,
       a_Var1 = c("A","B","C","D"),
       a_Var2 = c("T","F","F","T"))

df2 <- data.frame(ID = c(1:4),
       Year = 2002,
       b_Var1 = c("E","F","G","H"))

Желаемый конечный продукт

df_combined <- data.frame(ID = c(1,1,2,2,3,3,4,4),
                      Year = c(2001,2002,2001,2002,2001,2002,2001,2002),
                      Var1 = c("A","E","B","F","C","G","D","H"),
                      Var2 = c("T",NA,"F",NA,"F",NA,"T",NA))

Вопрос в том, как «связать» таким образом, чтобы префикс a_ или b_ был удален и Var1, Var2 и т. Д. Стали новыми столбцами.

Попробовал plyr rbind.fill, но это не решило проблему.

1 Ответ

3 голосов
/ 02 мая 2019

Вот один из вариантов. Поместите наборы данных в list, rename, удалив префиксную часть, включая _ и arrange с помощью 'ID'

library(tidyverse)
map_df(list(df1, df2), ~ .x %>% 
             rename_all(~ str_remove(.x, "^[^_]+_"))) %>%
   arrange(ID)
#  ID Year Var1 Var2
#1  1 2001    A    T
#2  1 2002    E <NA>
#3  2 2001    B    F
#4  2 2002    F <NA>
#5  3 2001    C    F
#6  3 2002    G <NA>
#7  4 2001    D    T
#8  4 2002    H <NA>
...