1

我想根据一列匹配两个文件并组合匹配的行。但是其中一个文件 ( file1.txt) 不止一次具有相同的条目。举个例子:

文件1.txt

chr:123 a
chr:123 b
chr:456 a

文件2.txt

chr:123 aa
chr:456 bb

我想根据第一列提取索引。

最终输出应如下所示:

chr:123 a aa
chr:123 b aa
chr:456 a bb

我尝试在 R 上相交,但无法弄清楚当file1.txt多次具有相同条目时如何组合匹配线。我正在使用两个 for 循环,但文件非常大并且需要很多时间。

在 perl 或 R 中有更快的方法吗?

4

2 回答 2

2

试试这个:

one <- data.frame(
id=c("chr:123","chr:123","chr:456"),
value=c("a","b","a")
)

two <- data.frame(
id=c("chr:123","chr:456"),
value=c("aa","bb")
)

merge(one,two,by="id",all.x=TRUE)

#result
       id value.x value.y
1 chr:123       a      aa
2 chr:123       b      aa
3 chr:456       a      bb
于 2012-05-17T23:24:32.720 回答
1

这是另一种选择:

use Modern::Perl;

my %file1Hash;

open my $file1, "<file1.txt" or die $!;
do { my ( $key, $value ) = split; push @{ $file1Hash{$key} }, $value }
  for <$file1>;
close $file1;

open my $file2, "<file2.txt" or die $!;
do {
    my ( $key, $value ) = split;
    do { say "$key $_ $value" for @{ $file1Hash{$key} } } if $file1Hash{$key};
  }
  for <$file2>;
close $file2;

输出:

chr:123 a aa
chr:123 b aa
chr:456 a bb
于 2012-05-18T14:07:18.970 回答