按R中的行名对两个数据帧进行不精确合并
我有两个数据帧:按R中的行名对两个数据帧进行不精确合并,r,merge,match,R,Merge,Match,我有两个数据帧:A有189行79列,和B有354行2列。它们的一些行名称大致如下所示: A: Sample value1 value2 value 3 10003 a b d 10003_Qi1 a a c 10003_Qi2 b a c 10017 b g c 10018
A
有189行79列,和B
有354行2列。它们的一些行名称大致如下所示:
A:
Sample value1 value2 value 3
10003 a b d
10003_Qi1 a a c
10003_Qi2 b a c
10017 b g c
10018 b f s
10025_Qi o w c
10040_Qi1 x y o
10040_ArT1 e g g
10125 p g m
10140_Ar1 w n c
10225 z c p
B:
Sample first
10003 4
10004 8
10018 45
10025 85
10032 7
10040 54
10140 2
10132 8
10200 65
10324 9
10400 32
我希望根据两个数据帧行名称的不精确匹配来合并这两个数据帧,这将导致:
Sample value1 value2 value 3 first
10003 a b d 4
10018 b f s 45
10025_Qi o w c 85
10040_Qi1 x y o 54
10140_Ar1 w n c 2
规则是:
A
中的code>\u Qi1和\u Qi2
中,B
中的样本使用\u Qi1
获取A
中的样本值
b\u Qi1
和\u ArT1
在A
中,B
中的样本获取A
中的样本值,并与\u Qi1
合并下面是我的麻烦解决方案:
A<-data.frame(matrix(c(10003,"10003_q1","10007_q1",10008,1,2,3,2,4,3,1,2),4,3))
colnames(A)<-c("sample","value1","value2")
# sample value1 value2
# 1 10003 1 4
# 2 10003_q1 2 3
# 3 10007_q1 3 1
# 4 10008 2 2
B<-data.frame(matrix(c(10003,10004,10007,10009,4,8,45,85),4,2))
colnames(B)<-c("sample","first")
# sample first
# 1 10003 4
# 2 10004 8
# 3 10007 45
# 4 10009 85
# step 1: adapt both dataframes
A$first<-NA
A$sample2<-strtrim(A$sample,5)
B$sample<-as.factor(B$sample)
# step 2: work down table A merging values from table B
# note: this assumes that B$sample is unqiue
for(i in 1:NROW(A)){
ind<-A$sample2[i]==B$sample
if(sum(ind)!=0){ # makes sure a value was found
A[i,"first"]<-B$first[ind]
}
}
# step 3: remove any duplicates of A$sample2
# note: this assumes that the 5 digit number will always come before the number+extension
A<-A[!duplicated(A$sample2),]
# sample value1 value2 first sample2
# 1 10003 1 4 4 10003
# 3 10007_q1 3 1 45 10007
# 4 10008 2 2 NA 10008
a您想用哪种编程语言来实现这一点(可以猜r,但为了清楚起见,请添加标记)。另外,到目前为止,您自己尝试了什么来实现这一点?我尝试了agrep in循环,但它不起作用。但有一点:在规则2b中,我们需要扩展名为Q的样本值,但在这里,这些值是用a选择的。