在R中合并数据框中重复的多行数据

3

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

    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

Thank you in advance!

2个回答

10
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

谢谢,Eddi!我在R方面还比较新,所以感谢您的帮助。 - hesaguy

2

使用data.table的eddi的回答非常好。

在这种情况下,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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接