【问题标题】:R - Add a column from values of others dataframes with conditionsR - 从具有条件的其他数据框的值中添加一列
【发布时间】:2017-05-06 16:26:20
【问题描述】:

我的数据框是:

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

我想在V2 == IID 时从platesRACplatesDESIR 获取V3 中的值,并将此值添加到dataMDS 的新列plates 中。

我尝试过合并:

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 50016platesDESIR 中,而不是在 platesRAC 中。我不知道如何做 OR |没有 NA 值。

另外,我不希望合并后的V1 列,只是plates 中的V3 列重命名

我想要的结果:

   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

感谢您的帮助

【问题讨论】:

  • 尝试与y=rbind(platesRAC, platesDESIR)合并
  • 请使您的示例可重现并添加预期的输出。这让其他人更容易帮助你
  • 它不适用于rbind,因为我的数据帧有不同的长度,所以我也有这种方式的 NA 值。我添加了代码来重现我的数据框和预期的结果,感谢您的建议。
  • 只需使用complete.cases,即final &lt;- merge(x = dataMDS, y = rbind(platesRAC, platesDESIR), by.x = "IID", by.y = 'V2', all = TRUE); final[complete.cases(final),]
  • 这对你有用吗?我仍然有完整案例的 NA 值和相同的确切示例。我认为这是因为某些 V2 值不在 dataMDS$IID 中。我想要 dataMDS 最后的长度,而不是 rbind(platesRAC,plateDESIR) 的长度。

标签: r dataframe merge conditional-statements


【解决方案1】:

这不是合并,而是在绑定板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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-21
    • 2017-10-16
    • 1970-01-01
    • 2018-05-15
    • 2021-01-09
    • 2021-12-14
    • 2023-04-02
    • 2021-10-08
    相关资源
    最近更新 更多