【问题标题】:Consolidating multiple duplicated rows of a dataframe in R在 R 中合并数据框的多个重复行
【发布时间】:2013-06-26 19:06:39
【问题描述】:

我有一个包含六列的大型数据集,第一列是与其余五列中的比率值匹配的标识符列表:

    Identifier cd_log.ratios cs_log.ratios me_log.ratios pn_log.ratios sm_log.ratios
          A2ICC5     0.3784142            NA            NA            NA            NA
          A2ICC5            NA    -0.4910396            NA            NA            NA
          A2ICC5            NA            NA    -0.1755617            NA            NA
          A2ICC5            NA            NA            NA            NA     0.2279259
          A2ICC8     0.3045490            NA            NA            NA            NA
          A2ICC8            NA     0.2045638            NA            NA            NA

注意前四行,五个比率列中的四个共享一个重复的标识符。如何合并我的数据框以删除重复的标识符并将比率转移到一行?输出看起来像这样:

Identifier  cd_log.ratios   cs_log.ratios   me_log.ratios   pn_log.ratios   sm_log.ratios
A2ICC5      0.3784142      -0.4910396      -0.1755617              NA       0.2279259
A2ICC8       0.304549       0.2045638              NA              NA              NA

提前谢谢你!

【问题讨论】:

    标签: r dataframe


    【解决方案1】:
    df = read.table(text = '   Identifier cd_log.ratios cs_log.ratios me_log.ratios pn_log.ratios sm_log.ratios
              A2ICC5     0.3784142            NA            NA            NA            NA
              A2ICC5            NA    -0.4910396            NA            NA            NA
              A2ICC5            NA            NA    -0.1755617            NA            NA
              A2ICC5            NA            NA            NA            NA     0.2279259
              A2ICC8     0.3045490            NA            NA            NA            NA
              A2ICC8            NA     0.2045638            NA            NA            NA', header = T)
    
    library(data.table)
    dt = data.table(df)
    
    dt[, lapply(.SD, na.omit), by = Identifier]
    #   Identifier cd_log.ratios cs_log.ratios me_log.ratios pn_log.ratios sm_log.ratios
    #1:     A2ICC5     0.3784142    -0.4910396    -0.1755617            NA     0.2279259
    #2:     A2ICC8     0.3045490     0.2045638            NA            NA            NA
    

    【讨论】:

    • 谢谢,艾迪!我是 R 的新手,非常感谢您的帮助。
    【解决方案2】:

    eddi 使用data.table 的反应很棒。

    在这种情况下,library(reshape) 中的 meltcast 也可以完成这项工作。

    dfm <- melt(df, id.var='Identifier')
    dfm <- subset(dfm, !is.na(value), )
    cast(dfm)
      Identifier cd_log.ratios cs_log.ratios me_log.ratios sm_log.ratios
    1     A2ICC5     0.3784142    -0.4910396    -0.1755617     0.2279259
    2     A2ICC8     0.3045490     0.2045638            NA            NA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 2019-02-06
      • 1970-01-01
      • 2021-02-22
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      相关资源
      最近更新 更多