将单列值连接到多个列名并展开dataframe
我正在从多个文件创建一个汇总表。我已经从4个文件导入了数据,file1…file4,并使用将单列值连接到多个列名并展开dataframe,r,R,我正在从多个文件创建一个汇总表。我已经从4个文件导入了数据,file1…file4,并使用restrape2包进行了一些合并/操作,因此我的数据如下所示: chr.list positions sample ref alt depth freq sum min.prop chr1 12428 file4 C a 52 2 14 0.2857143 chr1 12428 file4 C a 52 2 14 0.28
restrape2
包进行了一些合并/操作,因此我的数据如下所示:
chr.list positions sample ref alt depth freq sum min.prop
chr1 12428 file4 C a 52 2 14 0.2857143
chr1 12428 file4 C a 52 2 14 0.2857143
chr1 12428 file3 C c 52 1 18 NA
chr1 12428 file3 C g 52 2 4 0.5000000
chr1 12428 file1 C g 52 2 4 0.5000000
chr1 12428 file2 C t 52 2 16 0.1875000
现在,我想分离四个文件中每个文件的数据,但将其保留在相同的数据帧中。我想保持chr.list
、positions
、ref
和alt
列的完整性,但要删除列sample
,将该列值与列depth
、freq
、sum
和min.prop
合并,并将数据转换为:
chr.list positions ref alt file1.depth file1.freq file1.sum file1.min.prop file2.depth file2.freq file2.sum file2.min.prop file3.depth file3.freq file3.sum file3.min.prop
chr1 12428 C a NA NA NA NA NA NA NA NA NA NA NA NA
chr1 12428 C c NA NA NA NA NA NA NA NA 52 1 18 NA
chr1 12428 C g 52 2 4 0.5 NA NA NA NA 52 2 4 0.5
chr1 12428 C t NA NA NA NA 52 2 16 0.18 NA NA NA NA
我怎么做?我猜测使用dcast,但我不确定
谢谢 整形是直接进行的:
dd <- read.table(header = TRUE, stringsAsFactors = FALSE,
text = "chr.list positions sample ref alt depth freq sum min.prop
chr1 12428 file4 C a 52 2 14 0.2857143
chr1 12428 file4 C a 52 2 14 0.2857143
chr1 12428 file3 C c 52 1 18 NA
chr1 12428 file3 C g 52 2 4 0.5000000
chr1 12428 file1 C g 52 2 4 0.5000000
chr1 12428 file2 C t 52 2 16 0.1875000")
n <- names(dd)
rr <- reshape(dd[!duplicated(dd$sample), ], direction = 'wide', sep = '~',
idvar = n[c(1:2,4:5)], v.names = n[6:9], timevar = n[3])
# chr.list positions ref alt depth~file4 freq~file4 sum~file4 min.prop~file4
# 1 chr1 12428 C a 52 2 14 0.2857143
# 3 chr1 12428 C c NA NA NA NA
# 5 chr1 12428 C g NA NA NA NA
# 6 chr1 12428 C t NA NA NA NA
# depth~file3 freq~file3 sum~file3 min.prop~file3 depth~file1 freq~file1
# 1 NA NA NA NA NA NA
# 3 52 1 18 NA NA NA
# 5 NA NA NA NA 52 2
# 6 NA NA NA NA NA NA
# sum~file1 min.prop~file1 depth~file2 freq~file2 sum~file2 min.prop~file2
# 1 NA NA NA NA NA NA
# 3 NA NA NA NA NA NA
# 5 4 0.5 NA NA NA NA
# 6 NA NA 52 2 16 0.1875
数据中的第二行和第三行是相同的。这在合并时可能是个问题。
n实际上,一个是正向链(a)上的,一个是反向链(a)上的。我可以删除重复项,这只是为了计算频率列。这就是为什么它在freq中显示2,其中前两行中有“a”。@rawr我怎么能在列名之前有文件名?使用您的解决方案,我可以得到列名。filenames@SameerChavan尝试:在不删除第二行和第四行的情况下,重塑(dd,v.names=n[6:9],idvar=n[c(1:2,4:5)],timevar=n[3],dir='w')
。
idx <- grepl('~', names(rr))
names(rr)[idx] <- sapply(strsplit(names(rr)[idx], '~'),
function(x) paste0(rev(x), collapse = '_'))
rr[, c(1:4, order(names(rr)[-(1:4)]) + 4)]
# chr.list positions ref alt file1_depth file1_freq file1_min.prop file1_sum
# 1 chr1 12428 C a NA NA NA NA
# 3 chr1 12428 C c NA NA NA NA
# 5 chr1 12428 C g 52 2 0.5 4
# 6 chr1 12428 C t NA NA NA NA
# file2_depth file2_freq file2_min.prop file2_sum file3_depth file3_freq
# 1 NA NA NA NA NA NA
# 3 NA NA NA NA 52 1
# 5 NA NA NA NA NA NA
# 6 52 2 0.1875 16 NA NA
# file3_min.prop file3_sum file4_depth file4_freq file4_min.prop file4_sum
# 1 NA NA 52 2 0.2857143 14
# 3 NA 18 NA NA NA NA
# 5 NA NA NA NA NA NA
# 6 NA NA NA NA NA NA