在 R 中的列表中组合公共列

问题描述 投票:0回答:1

我有一个如下所示的列表对象。

df1 <- data_frame(ID = paste0(LETTERS[1],1:4), valueA = seq(0.1,0.4,0.1), Category= "Apples", valueDEF = seq(0.1,0.4,0.1), valueDEF2 = seq(0.1,0.4,0.1) )
df2 <- data_frame(ID = paste0(LETTERS[1],5:8), valueB = seq(0.1,0.4,0.1),  Category= "Apples2")
df3 <- data_frame(ID = paste0(LETTERS[1],9:12), valueC = seq(0.1,0.4,0.1),  Category= "Apples3")

list1 <- list(df1, df2, df3);list1



  [[1]]
# A tibble: 4 × 5
  ID    valueA Category valueDEF valueDEF2
  <chr>  <dbl> <chr>       <dbl>     <dbl>
1 A1       0.1 Apples        0.1       0.1
2 A2       0.2 Apples        0.2       0.2
3 A3       0.3 Apples        0.3       0.3
4 A4       0.4 Apples        0.4       0.4

[[2]]
# A tibble: 4 × 3
  ID    valueB Category
  <chr>  <dbl> <chr>   
1 A5       0.1 Apples2 
2 A6       0.2 Apples2 
3 A7       0.3 Apples2 
4 A8       0.4 Apples2 

[[3]]
# A tibble: 4 × 3
  ID    valueC Category
  <chr>  <dbl> <chr>   
1 A9       0.1 Apples3 
2 A10      0.2 Apples3 
3 A11      0.3 Apples3 
4 A12      0.4 Apples3 

我想根据公共列名将它们合并到 1 个数据框中。

预期答案

ID Category
A1  Apples 
A2  Apples 
A3  Apples 
A4  Apples 
A5  Apples2 
A6  Apples2
A7  Apples2
A8  Apples2 
A9  Apples3 
A10 Apples3 
A11 Apples3 
A12 Apples3 

如何解决这个问题?非常感谢。

r dplyr tidyr data-manipulation tidy
1个回答
1
投票
common_cols <- Reduce(intersect, lapply(list1, colnames))
df_all <- bind_rows(list1)[common_cols]
 ID    Category
   <chr> <chr>   
 1 A1    Apples  
 2 A2    Apples  
 3 A3    Apples  
 4 A4    Apples  
 5 A5    Apples2 
 6 A6    Apples2 
 7 A7    Apples2 
 8 A8    Apples2 
 9 A9    Apples3 
10 A10   Apples3 
11 A11   Apples3 
12 A12   Apples3 
© www.soinside.com 2019 - 2024. All rights reserved.