我的数据框(df1)中有一个像这样的列:

ID
AB
CD;EF
IJ
KL
MN
OP;WX
WW
YZ


另一个数据帧(df2)具有以下格式(这是一个非常大的数据表):

myIDColumn  someName    somevalue
AB  gsdfg   123
CD  tfgsdfg 234
EF  sfdgsf  365
GH  gdfgb   53453
IJ  sr  64564
KL  sfsdv   4234234
MN  ewrwe   5
OP  dsfsss  3453
QR  gggg    667
ST  dss 7567
UV  hhhhjf  55
WX  dfadasad    8657
YZ  ghfgh   1234
ABC gdgfg 234455
VCB hgjkk 5555667


我想基于我的df1合并数据帧,但是我该如何解决该问题
在此圆锥形连接处的分号。有没有办法使用正则表达式连接这些数据框?

我想要的输出:


ID    someName    somevalue
AB    gsdfg   123
CD;EF tfgsdfg,sfdgsf  234,365
IJ    sr  64564
KL    sfsdv   4234234
MN    ewrwe   5
OP;WX dsfsss,dfadasad 3453,8657
WW
YZ    dfadasad    8657
TT



任何帮助都非常感谢。谢谢!

最佳答案

分两步,类似于发布的解决方案,但更为紧凑。


合并2 data.frame
然后转换包含“;”的行


这里的代码:

##step1
mm <- merge(df2,df1,by.y='ID',by.x='myIDColumn',all.y=TRUE)
## step2
rr <- do.call(rbind,lapply(strsplit(mm$myIDColumn[grep(';',mm$myIDColumn)],';'),
       function(x){
            res <- paste(df2[df2$myIDColumn==x[1],],
                  df2[df2$myIDColumn==x[2],],
                  sep=',')
            res[1] <- paste(x,collapse=';')
            res}))
mm[grep(';',mm$myIDColumn),]  <- rr

 myIDColumn        someName somevalue
1         AB           gsdfg       123
2      CD;EF  tfgsdfg,sfdgsf   234,365
3         IJ              sr     64564
4         KL           sfsdv   4234234
5         MN           ewrwe         5
6      OP;WX dsfsss,dfadasad 3453,8657
7         WW            <NA>      <NA>
8         YZ           ghfgh      1234

关于r - R-合并两个数据帧,但其中一些值中包含半冒号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16768270/

10-12 14:14
查看更多