[英]Combine two files based on a column matching - one of the file's column has the same entries more than once
我想基於一列匹配兩個文件並組合匹配的行。 但其中一個文件( file1.txt
)不止一次具有相同的條目。 舉個例子:
FILE1.TXT
chr:123 a
chr:123 b
chr:456 a
FILE2.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中有更快的方法嗎?
嘗試這個:
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
這是另一種選擇:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.