R - 根据条件从其他数据帧的值添加列

时间:2016-12-21 09:39:36

标签: r dataframe merge conditional-statements

我的数据框是:

dataMDS <- data.frame(FID=c(1,1), IID=c("CD03577","50016"), SOL=c(0,0), C1=c(0.00332472,-0.00154285))
> dataMDS
   FID      IID  SOL            C1
1    1  CD03577    0    0.00332472
2    1    50016    0   -0.00154285

我想添加一个新列plates,其中包含来自其他2个数据帧的值:

platesRAC <- data.frame(V1=c(1,1), V2=c("CD03577","CD0371"), V3=c("2011-01-12_RAC1","2011-01-27_RAC5"))
> platesRAC
  V1      V2                    V3
1  1 CD03577       2011-01-12_RAC1
2  1  CD0371       2011-01-27_RAC5

platesDESIR <- data.frame(V1=c(1,1,1), V2=c("50015","50016","50017"), V3=c("2011-11-23_DESIR9","2011-11-23_DESIR9","2011-11-23_DESIR8"))
> platesDESIR
  V1    V2                 V3
1  1 50015  2011-11-23_DESIR9
2  1 50016  2011-11-23_DESIR9
3  1 50017  2011-11-23_DESIR8

我希望在platesRAC时从platesDESIRV2 == IID获取V3中的值,并将此值添加到plates中的新列dataMDS中。

我尝试使用merge:

new <- merge(x = dataMDS, y = platesRAC, by.x = "IID", by.y = 'V2', all = TRUE)

   FID      IID  SOL            C1   V1               V3
1    1  CD03577    0    0.00332472    1  2011-01-12_RAC1
2    1    50016    0   -0.00154285   NA             <NA>

当然我有NA值,因为IID 50016位于platesDESIR而不是platesRAC。我不知道怎么做OR |没有NA值。

另外,合并后我不想要V1列,V3

中的plates列重命名

我希望得到的结果:

   FID      IID  SOL            C1              plates
1    1  CD03577    0    0.00332472     2011-01-12_RAC1
2    1    50016    0   -0.00154285   2011-11-23_DESIR9

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

这不是合并,而是在绑定牌照RAC和牌照之后的比赛DESIR:

bindRACDESIR = rbind(platesRAC, platesDESIR)
dataMDS$plates <- bindRACDESIR$V3[match(dataMDS$IID,bindRACDESIR$V2)]

结果是:

   FID      IID  SOL            C1              plates
1    1  CD03577    0    0.00332472     2011-01-12_RAC1
2    1    50016    0   -0.00154285   2011-11-23_DESIR9