我有几个 txt 文件,每个文件中有 3 列,如下所示:
文件1:
ProbeID X_Signal_intensity X_P-Value
xxx 2.34 .89
xxx 6.45 .04
xxx 1.09 .91
xxx 5.87 .70
. . .
. . .
. . .
文件2:
ProbeID Y_Signal_intensity Y_P-Value
xxx 1.4 .92
xxx 2.55 .14
xxx 4.19 .16
xxx 3.47 .80
. . .
. . .
. . .
文件3:
ProbeID Z_Signal_intensity Z_P-Value
xxx 9.40 .82
xxx 1.55 .04
xxx 3.19 .56
xxx 2.47 .90
. . .
. . .
. . .
在上述所有文件中,ProbeID 列的值相同,但其他列的值不同。现在我想使用 for 循环将上述所有文件组合成一个文件,如下所示:
ProbeID X_intensity X_P-Value Y_intensity Y_P-Value Z_intensity Z_P-Value
xxx 2.34 .89 1.4 .92 9.40 .82
xxx 6.45 .04 2.55 .14 1.55 .04
xxx 1.09 .91 4.19 .16 3.19 .56
xxx 5.87 .70 3.47 .80 2.47 .90
请帮助我。
最佳答案
读入 Richie Cotton 给出的文件,但确保在 apply 调用中添加适当的额外参数。其中之一,header=TRUE
应该可以添加。
file.names <- c("file X.txt", "file Y.txt", "file Z.txt")
file.list <- lapply(file.names, read.table, header=TRUE)
那么你可能需要一个
merge_recurse
来自 reshape package
:require(reshape)
mynewframe <- merge_recurse(file.list,all.x=TRUE,all.y=TRUE,by="ProbeID")
这将适用于任何给定数量的数据帧,前提是它不是十亿个。有关所用参数的更多信息,请参阅
?merge
的帮助页面。 .更正:在merge_recurse 中,您必须使用
all.x
和 all.y
如上面的更正所示。您不能只使用快捷方式 all
否则你会得到错误。小示范:
X2 <- data.frame(ProbeID=(2:4),Z2=4:6)
X1 <- data.frame(ProbeID=1:3,Z1=1:3)
X3 <- data.frame(ProbeID=1:3,Z3=7:9)
file.list <- list(X1,X2,X3)
mynewframe <- merge_recurse(file.list,all.x=TRUE,all.y=TRUE,by="ProbeID")
> mynewframe
ProbeID Z1 Z2 Z3
1 1 1 NA 7
2 2 2 4 8
3 3 3 5 9
4 4 NA 6 NA
关于r - 使用 R 将制表符 delim 文件合并为单个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6942662/