2016-07-12 152 views
0

我有两个像这样的数据框。提取合并并从两个数据帧中创建一个新列

答:

A1 A2 
1: a e 
2: b f 
3: c g 
4: d h 

B:

 B1 B2 
1:  a 1 
2: b,i,j,k 2 
3:  a,q 3,4 
4:  e 4,5 
5: c,d,f 6 

一旦A1属于B1,我想创建一个新列A3使用信息B2这样

A3 
1 1,3,4 
2  2 
3  6 
4  6 
+0

您应该使这个更容易复制,像这样我们就可以直接复制粘贴工作的东西到R.我通常使用'dput(setDF(A))'。 – Frank

回答

1

你可以循环使用A$A1sapply,使用grep将行索引B1用火柴,并用它来子集B2

A$A3 <- sapply(A$A1, function(x){paste(B$B2[grep(x, B$B1)], collapse = ',')}) 

A 
## A1 A2 A3 
## 1: a e 1,3,4 
## 2: b f  2 
## 3: c g  6 
## 4: d h  6 

或data.table符号,

A[, A3 := sapply(A1, function(x){B[grep(x, B1), paste(B2, collapse = ',')]})][]