我有一个由六列组成的大型数据集,第一列是与其余五列中的比率值匹配的标识符列表:
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
提前谢谢!
答案 0 :(得分: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
答案 1 :(得分:2)
eddi使用data.table
的回复非常棒。
在这种情况下,melt
中的cast
和library(reshape)
也会开展工作。
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