R根据另一个数据帧的精确匹配替换列的值

时间:2020-02-24 11:02:17

标签: r

我在R中有2个数据帧

DF1

ColA ColB  observation
123  Text1 45
234  Text2 65
345  Text3 78

DF2

ColumnA ColumnB metric
123     Text1    7
123     Text2    65
345     Text1    102

我想将observation的{​​{1}}列替换为DF1的{​​{1}}列的值,但只对与{{1 }} = {metricDF2 = ColA。上面的示例将输出以下数据帧:

ColumnA

2 个答案:

答案 0 :(得分:1)

这是使用merge + ifelse

的基本R解决方案
DF <- within(merge(DF1,DF2,by.x = c("ColA","ColB"),by.y = c("ColumnA","ColumnB"),all.x = TRUE),
             value <- ifelse(is.na(metric),observation,metric))[-(3:4)]

这样

> DF
  ColA  ColB value
1  123 Text1     7
2  234 Text2    65
3  345 Text3    78

答案 1 :(得分:0)

使用dplyr的解决方案:

由于您没有提供minimal reproducible example,所以我无法测试代码...

library(dplyr)
DF1 %>%
  left_join(DF2, by=("ColA"="ColumnA", "ColB"="ColumnB") %>%
  mutate(value = if_else(!is.na(metric), metric, observation)