如何加入而不丢失信息?

时间:2015-06-03 10:12:31

标签: r

我有几个具有以下结构的数据框:

   january        february       march       april

   Id   A  B      Id   A  B      Id  A  B    Id   A   B
   1    4  4       1   2  3       3  9  7    1    4   3
   2    3  5       2   2  7       2  2  4    4    6   2
   3    6  8       4   9  9                  2    3   5 
   4    7  8  

我想将它们放入一个单独的数据框中,其中包含缺失ID的'N'和相应的属性。结果可能如下:

                Id   janA janB   febA  febB    marA marB   aprA aprB
                1     4     4     2     3       NA   NA     4    3
                2     3     5     2     7       2    4      3    5
                3     6     8     NA    NA      9    7      NA   NA
                4     7     8     9     9       NA   NA     6    2

给出一些数据:

           ID<-c(1,2,3,4)
           A<-c(4,3,6,7)
           B<-c(4,5,8,8)
           jan<-data.frame(ID,A,B)
           ID<-c(1,2,4)
           A<-c(2,2,9)
           B<-c(3,7,9)
           feb<-data.frame(ID,A,B)
           ID<-c(3,2)
           A<-c(9,2)
           B<-c(7,4)
           mar<-data.frame(ID,A,B)
           ID<-c(1,4,2)
           A<-c(4,6,3)
           B<-c(6,2,5)
           apr<-data.frame(ID,A,B)

我尝试过:

          test <- rbind(jan, feb,mar,apr)
          test <- rbind.fill(jan, feb, mar,apr) 

1 个答案:

答案 0 :(得分:2)

您可以在Reduce中使用合并。

首先,让我们准备一份包含数据的列表,并将列名更改为janA,janB,febA,......

list_df <- list(
  jan = jan,
  feb = feb,
  mar = mar,
  apr = apr
)
list_df <- lapply(names(list_df), function(name_month){
  df_month <- list_df[[name_month]]
  names(df_month)[-1] <- paste0(name_month, names(df_month)[-1])
  df_month
})

Reduce将合并所有这些。

Reduce(function(x, y) merge(x, y, by = "ID", all = TRUE), list_df)