【发布时间】: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 时从platesRAC 或platesDESIR 获取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 50016 在 platesDESIR 中,而不是在 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 <- 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