如何根据列索引粘贴两行 R 数据框?

How to paste two rows of an R dataframe based on a column index?

我有一个如下所示的 R 数据框:

rs2288741 rs1821185 rs1432315 ID
T         A         T         A 
T         C         T         A 
G         C         C         B 
T         C         T         B
G         A         C         C
G         A         C         C
T         A         C         D
T         C         T         D

当“ID”等于下一个时,我需要粘贴行值。输出文件应如下所示:

rs2288741 rs1821185 rs1432315 ID 
TT        AC        TT        A
GT        CC        CT        B
GG        AA        CC        C
TT        AC        CT        D

有什么简单的方法可以得到这个吗?

data.table解决方案

setDT(mydata)[, lapply(.SD, paste0, collapse = ""), by = .(ID)]
#    ID rs2288741 rs1821185 rs1432315
# 1:  A        TT        AC        TT
# 2:  B        GT        CC        CT
# 3:  C        GG        AA        CC
# 4:  D        TT        AC        CT

如果你使用 tidyverse,你可以这样做:

library(tidyverse)

df %>% 
  group_by(ID) %>%
  summarize(across(everything(), ~ paste(.x, collapse = ''))) %>%
  select(2:4, 1)
#> # A tibble: 4 x 4
#>   rs2288741 rs1821185 rs1432315 ID   
#>   <chr>     <chr>     <chr>     <chr>
#> 1 TT        AC        TT        A    
#> 2 GT        CC        CT        B    
#> 3 GG        AA        CC        C    
#> 4 TT        AC        CT        D

reprex package (v2.0.1)

于 2022-04-11 创建

基础 R 版本可以是

aggregate(. ~ ID, data = df, function(x) paste(x, collapse = ""))
#>   ID rs2288741 rs1821185 rs1432315
#> 1  A        TT        AC        TT
#> 2  B        GT        CC        CT
#> 3  C        GG        AA        CC
#> 4  D        TT        AC        CT