【问题标题】:Add rows content to the column end of the another row将行内容添加到另一行的列尾
【发布时间】:2020-11-24 02:05:42
【问题描述】:

我有以下数据框:

> df
GENE     ID     EXPR1     EXPR2
ENS127   1122O   1.2       1.2
ENS127   1122O   2.3       1.0
ENS555   33212   4.5       3.9
ENS555   33212   1.2       3.7
ENS941   44444   2.3       3.6

我正在寻找一种方法将所有具有相似 GENE 的行合并为一个,以便对于每个唯一的 GENE,只有一行包含第三列的所有值。这将被迭代直到大数据框结束。
输出如下所示:

> df.output
GENE     ID     EXPR1   EXPR2   EXPR.01   EXPR.02  
ENS127   1122O   1.2     1.2     2.3        1.0     
ENS555   33212   4.5     3.9     1.2        3.7
ENS941   44444   2.3     3.6     NA        NA

感谢您的帮助。

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    您可以获取长格式数据,以便所有EXPR 值都在一个列中,为每个GENE 创建唯一的列名,然后获取宽格式数据。

    library(dplyr)
    library(tidyr)
    
    df %>%
      pivot_longer(cols = starts_with('EXPR')) %>%
      group_by(GENE, name) %>%
      mutate(name = paste(name, row_number(), sep = '_')) %>%
      pivot_wider()
    
    #   GENE   ID    EXPR1_1 EXPR2_1 EXPR1_2 EXPR2_2
    #  <chr>  <chr>   <dbl>   <dbl>   <dbl>   <dbl>
    #1 ENS127 1122O     1.2     1.2     2.3     1  
    #2 ENS555 33212     4.5     3.9     1.2     3.7
    #3 ENS941 44444     2.3     3.6    NA      NA  
    

    数据

    df <- structure(list(GENE = c("ENS127", "ENS127", "ENS555", "ENS555", 
    "ENS941"), ID = c("1122O", "1122O", "33212", "33212", "44444"
    ), EXPR1 = c(1.2, 2.3, 4.5, 1.2, 2.3), EXPR2 = c(1.2, 1, 3.9, 
    3.7, 3.6)), class = "data.frame", row.names = c(NA, -5L))
    

    【讨论】:

    • 感谢罗纳克。它给出了一个错误,上面写着错误:cols 必须选择至少一列但是,使用 starts_with 函数对我来说很有意义,看起来无法识别字符串模式。
    【解决方案2】:

    这是data.table 解决方案

    library(data.table)
    setDT(df)[, rid := rowid(GENE, ID)]
    dcast(df, GENE + ID ~ rid, sep = ".", value.var = c("EXPR1", "EXPR2"))
    

    输出

         GENE    ID EXPR1.1 EXPR1.2 EXPR2.1 EXPR2.2
    1: ENS127 1122O     1.2     2.3     1.2     1.0
    2: ENS555 33212     4.5     1.2     3.9     3.7
    3: ENS941 44444     2.3      NA     3.6      NA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 2018-06-15
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      相关资源
      最近更新 更多