繁体   English   中英

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

[英]R replace values of a column based on exact match of another data frame

我在 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

我想用DF2metric列的值替换DF1observation列,但仅用于在ColA = ColumnAColB = ColumnB上具有完全匹配的行。 上面的例子应该输出以下数据帧:

ColA ColB  value
123  Text1 7
234  Text2 65
345  Text3 78

这是一个基本的 R 解决方案,使用merge + ifelse

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

使用dplyr解决方案:

由于您没有提供最小的可重现示例,因此我无法测试代码...

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM