【问题标题】:R - Merge two cells from different dataframes togetherR - 将来自不同数据帧的两个单元格合并在一起
【发布时间】:2021-08-27 07:18:55
【问题描述】:

我有两个具有相同匹配列/行值的数据框,如下所述:

df1

    ID1 ID2 ID3 ID4 ID5 ID6
Response1   A       D   A       F
Response2   B       D   B       E
Response3   C   D   D   D       A
Resposne4   D       A   A       B

和 df2

  ID1   ID2 ID3 ID4 ID5 ID6
Response1   A       C   N       E
Response2   F           D       
Response3   E   B   C   A       B
Resposne4   X       A           A
Response5   F       A       C   

我想合并由; 分隔的匹配列/行。顺序无所谓,df1 或 df2 可以先来。在下面的示例中,我首先使用 df2

这是预期的输出:

df3

    ID1 ID2 ID3 ID4 ID5 ID6
Response1   A;A     C;D N;A     E;F
Response2   F;B     D3  D;B     E
Response3   E;C B;D C;D A;D     B;A
Resposne4   X;D     A;A A       A;B
Response5   F       A       C   

我通常会尝试在我接近答案的地方包含一些测试代码,但老实说,我什至不知道从哪里开始。

谢谢!

【问题讨论】:

  • 请发布易于复制、粘贴和使用的数据。

标签: r dplyr


【解决方案1】:

我们可以从两个数据帧和paste两个相同大小的数据帧中得到共同的行名。

df3 <- df2
common_rows <- intersect(rownames(df1), rownames(df2))
df3[common_rows, ] <- trimws(paste(as.matrix(df2[common_rows, ]), as.matrix(df1), sep = ';'), whitespace = ';')
df3

#          ID1 ID2 ID3 ID4 ID5 ID6
#Response1 A;A     C;D N;A     E;F
#Response2 F;B       D D;B       E
#Response3 E;C B;D C;D A;D     B;A
#Resposne4 X;D     A;A   A     A;B
#Response5   F       A       C    

【讨论】:

    【解决方案2】:

    一个整洁的选项。

    library(dplyr)
    library(stringr)
    
    df2 %>%
      mutate(Response = row_number()) %>%
      bind_rows(mutate(df1, Response = row_number())) %>%
      group_by(Response) %>%
      summarise(across(everything(), ~ str_c(., collapse = ';'))) %>%
      mutate(Response = str_c('Response', Response, sep = ' '))
    
    # # A tibble: 5 x 7
    #   Response   ID1   ID2   ID3   ID4   ID5   ID6  
    #   <chr>      <chr> <chr> <chr> <chr> <chr> <chr>
    # 1 Response 1 A;A   NA    C;D   N;A   NA    E;F  
    # 2 Response 2 F;B   NA    NA    D;B   NA    NA   
    # 3 Response 3 E;C   B;D   C;D   A;D   NA    B;A  
    # 4 Response 4 X;D   NA    A;A   NA    NA    A;B  
    # 5 Response 5 F     NA    A     NA    C     NA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多