R 使用字符串查找唯一行,并对数据帧列的相应值求和

R 使用字符串查找唯一行,并对数据帧列的相应值求和,r,dataframe,dplyr,tidyverse,R,Dataframe,Dplyr,Tidyverse,我有一个数据帧: gene=c("Esr", "Esr", "Esr", "Nop", "Nop", "Nop", "Stu", "Mkp", "Mkp", "P53", "Ard", "Ard") int_1=c(34,56,544,566,123,00,343,56,22,10,11,19) int_2=c(24,26,58,56,13,00,34,6,22,10,119,109) int_3=c(14,36,54,566,12,00,43,56,00,770,11,119) df1 = c

我有一个数据帧:

gene=c("Esr", "Esr", "Esr", "Nop", "Nop", "Nop", "Stu", "Mkp", "Mkp", "P53", "Ard", "Ard")
int_1=c(34,56,544,566,123,00,343,56,22,10,11,19)
int_2=c(24,26,58,56,13,00,34,6,22,10,119,109)
int_3=c(14,36,54,566,12,00,43,56,00,770,11,119)
df1 = cbind.data.frame(gene, int_1, int_2, int_3)
  • df1长26000行,宽36列
  • 我想制作一个新的df2,其中列“gene”被查找唯一的字符串/文本,并且行中的所有值被汇总在一起以对应单独的强度列
  • 在df1中,基因名称出现多次。df2每个基因只有一次 我正在尝试使用tidyverse软件包,因此使用这些
    非常感谢(如果可能的话)。非常感谢。

    我们可以使用
    dplyr::summary\u all

    (1) 平均值

    library(tidyverse)
    df2 <- df1 %>%
        group_by(gene) %>%
        summarise_all(mean)
    df2;
    ## A tibble: 6 x 4
    #  gene  int_1 int_2 int_3
    #  <fct> <dbl> <dbl> <dbl>
    #1 Ard    15.0  114.  65.0
    #2 Esr   211.    36.  34.7
    #3 Mkp    39.0   14.  28.0
    #4 Nop   230.    23. 193.
    #5 P53    10.0   10. 770.
    #6 Stu   343.    34.  43.0
    

    嗯,这太简单了:)非常感谢。或者使用
    data.table
    setDT(df1)[,lapply(.SD,sum),by=gene]
    df2 <- df1 %>%
        group_by(gene) %>%
        summarise_all(sum)
    df2;
    ## A tibble: 6 x 4
    #  gene  int_1 int_2 int_3
    #  <fct> <dbl> <dbl> <dbl>
    #1 Ard     30.  228.  130.
    #2 Esr    634.  108.  104.
    #3 Mkp     78.   28.   56.
    #4 Nop    689.   69.  578.
    #5 P53     10.   10.  770.
    #6 Stu    343.   34.   43.
    
    aggregate(cbind(int_1, int_2, int_3) ~ gene, data = df1, sum)
    #  gene int_1 int_2 int_3
    #1  Ard    30   228   130
    #2  Esr   634   108   104
    #3  Mkp    78    28    56
    #4  Nop   689    69   578
    #5  P53    10    10   770
    #6  Stu   343    34    43