0

我有2个文件如下

文件 1:

Locus   S1  S2  S3
loc1    87  56  77
loc2    34  55  75
loc3    12  09  78
loc4    34  67  89
loc5    78  65  46

文件 2:

Locus   S1  S2  S3
loc3    13  43  34
loc5    43  56  90
loc7    89  56  33
loc1    56  88  00
loc4    66  77  98
loc2    34  44  66

我想比较/匹配两个文件中的“轨迹”列,这样,在“new_output 文件”中,我应该有来自 File1 的“轨迹”列的序列和来自 File2 的相应轨迹的值。

所以我的“new_output 文件”应该是这样的,

Locus   S1  S2  S3
loc1    56  88  00
loc2    34  44  66
loc3    13  43  34
loc4    66  77  98
loc5    43  56  90

我尝试过类似的东西,

file1 <-read.delim(file="file1.txt",header=TRUE,sep="\t")
file2 <-read.delim(file="file2.txt",header=TRUE,sep="\t")
new_output <- file1[file1$Locus %in% file2$Locus,]
write.table(new_output,file="new_output.txt",sep="\t")

但这并没有真正按照我想要的方式给我结果。谁能帮我这个?告诉我,我哪里出错了?

4

2 回答 2

1

您可以使用该功能merge

merge(file1["Locus"], file2, by = "Locus")

#  Locus S1 S2 S3
#1  loc1 56 88  0
#2  loc2 34 44 66
#3  loc3 13 43 34
#4  loc4 66 77 98
#5  loc5 43 56 90
于 2012-10-02T10:33:03.843 回答
1

你很亲密。而不是%in%,使用match

new_output <- file2[match(file1$Locus, file2$Locus), ]

您还可以做的是Locus用作行名:

file1 <-read.delim(file = "file1.txt", header = TRUE, sep = "\t", row.names = 1)
file2 <-read.delim(file = "file2.txt", header = TRUE, sep = "\t", row.names = 1)
new_output <- file2[rownames(file1$Locus), ]
于 2012-10-02T10:33:05.337 回答