R заменить значения столбца на основе точного соответствия другого фрейма данных - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть 2 кадра данных в R

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 столбец DF1 со значениями столбца metric в DF2, но только для строк, имеющих точное совпадение по ColA = ColumnA и ColB = ColumnB. В приведенном выше примере должен быть выведен следующий кадр данных:

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

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Вот базовое решение 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
0 голосов
/ 24 февраля 2020

Решение с использованием dplyr:

Поскольку вы не предоставили минимальный воспроизводимый пример Я не смог проверить код ...

library(dplyr)
DF1 %>%
  left_join(DF2, by=("ColA"="ColumnA", "ColB"="ColumnB") %>%
  mutate(value = if_else(!is.na(metric), metric, observation)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...