В кадре данных дублируйте значения, если они присутствуют в другом кадре данных - PullRequest
2 голосов
/ 24 марта 2019

Мне нужно написать столбец со значениями, которые присутствуют в другой таблице.Вот минимальный пример данных:

data1 <- data.frame(col1 = c("Jack", "Gina", "Helen", "John"))
data2 <- data.frame(col2 = c("Gina", "Ed", "John", "Sara"))

Мне нужен код, необходимый для этого следующего вывода:

   col1 col2
1  Jack   NA
2  Gina   Gina
3 Helen   NA
4  John   John

Где новый столбец с именем data1$col2 заполняется копируя значения формы data1$col1 но только если это значение присутствует в data2.

Ответы [ 3 ]

3 голосов
/ 24 марта 2019

Мы можем скопировать информацию о столбце col2 в data2, чтобы создать новый столбец с именем col1, а затем использовать col1 в качестве ключа для выполнения соединения между data1 и data2.data3 - конечный результат.

library(dplyr)

data3 <- data1 %>%
  left_join(data2 %>% mutate(col1 = col2), by = "col1")
data3
#    col1 col2
# 1  Jack <NA>
# 2  Gina Gina
# 3 Helen <NA>
# 4  John John
3 голосов
/ 24 марта 2019
transform(data1, col2 = as.character(data2$col2[match(data1$col1, data2$col2)]))
#   col1 col2
#1  Jack <NA>
#2  Gina Gina
#3 Helen <NA>
#4  John John
2 голосов
/ 24 марта 2019

Возможность соединения с data.table

library(data.table)
setDT(data1)[data2, col2 := col2, on = .(col1 = col2)]
data1
#   col1 col2
#1:  Jack <NA>
#2:  Gina Gina
#3: Helen <NA>
#4:  John John
...