合并R中的行并粘贴列值

g52tjvyc  于 2023-06-27  发布在  其他
关注(0)|答案(2)|浏览(126)

我有这个df

V1         V2         V3                
         7f7e     ASN 440 E  GLY 124 C        
3279     7f7e     ASP 442 E  THR 123 C          
3280     7f7e     ARG 346 E  TYR 119 C          
3281     7f7e     LEU 441 E  GLY 117 C          
3282     7f7e     ASN 440 E  ILE 115 C          
3283     7f7e     ASN 440 E  ALA 125 C       
3284     7f7e     SER 443 E  GLY 124 C          
3285     7f7e     ASP 442 E  TYR 119 C

我想做的是让一个df,每个V2只有一行,在V3中,所有对应于V2的值都放在一个字符串中。比如说

V1            V2             V3                                
7f7e     ASN 440 E  GLY 124 C, ILE 115 C, ALA 125 C

先谢谢你了!

mkshixfv

mkshixfv1#

我清理了你的数据,用制表符分隔每一列,并将其保存到一个文件stack_overflow.tsv-它看起来像这样(从文本编辑器剪切和粘贴):

V1  V2  V3
7f7e    ASN 440 E   GLY 124 C
7f7e    ASP 442 E   THR 123 C
7f7e    ARG 346 E   TYR 119 C
7f7e    LEU 441 E   GLY 117 C
7f7e    ASN 440 E   ILE 115 C
7f7e    ASN 440 E   ALA 125 C
7f7e    SER 443 E   GLY 124 C
7f7e    ASP 442 E   TYR 119 C

使用tidyverse软件包,您要做的事情非常简单:你只需要group_by组成唯一组的变量,在本例中是V1V2,然后你可以对剩下的变量做任何你想做的事情,以一种分组的方式-在本例中,用paste命令将它们连接成一行。我调用summarize,这样每个唯一的组都被折叠成一行,调用.groups='drop',这样最终的 Dataframe 就不再分组了--你可能想这样做,也可能不想这样做,这取决于你下一步打算做什么。

library(tidyverse)
df <- read_tsv("stack_overflow.tsv")
df2 <- group_by(df, V1, V2) %>% 
  summarize(V3=paste(V3, collapse=', '), .groups='drop')
print(df2)

结果:

# A tibble: 5 × 3
  V1    V2        V3                             
  <chr> <chr>     <chr>                          
1 7f7e  ARG 346 E TYR 119 C                      
2 7f7e  ASN 440 E GLY 124 C, ILE 115 C, ALA 125 C
3 7f7e  ASP 442 E THR 123 C, TYR 119 C           
4 7f7e  LEU 441 E GLY 117 C                      
5 7f7e  SER 443 E GLY 124 C
l7mqbcuq

l7mqbcuq2#

在Base R中,你可以:

aggregate(.~V2, df, \(x)toString(unique(x)))[names(df)]

    V1        V2                              V3
1 7f7e ARG 346 E                       TYR 119 C
2 7f7e ASN 440 E GLY 124 C, ILE 115 C, ALA 125 C
3 7f7e ASP 442 E            THR 123 C, TYR 119 C
4 7f7e LEU 441 E                       GLY 117 C
5 7f7e SER 443 E                       GLY 124 C

相关问题