R - объединить и заменить столбец, если идентификатор найден в другом фрейме данных - PullRequest
0 голосов
/ 03 июля 2018

У меня есть два фрейма данных, как показано ниже, и я пытаюсь улучшить свой код, поэтому столбец letters в df1 следует заменить на столбец letters в df2, если они совпадают.

df1 <- data.frame(ID = c(1,3,2,4,5), Letters = LETTERS[1:5], stringsAsFactors = F)
df2 <- data.frame(ID = c(1,3,4), Letters2 = "F", stringsAsFactors = F)

desired:
ID  letters
1   F
2   B
3   F
4   D
5   F

Это было бы как в следующей строке сделать следующее:

desired <- merge(df1, df2, by = "ID", all.x = T)
desired$letters <- ifelse(is.na(desired$letters2), desired$letters, desired$letters2)
desired$letters2 <- NULL

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Попробуйте это:

library(tidyverse)
df1%>%
   left_join(df2)%>%
   mutate(Letters=coalesce(letters2,Letters),letters2=NULL)
Joining, by = "ID"
  ID Letters
1  1       F
2  2       B
3  3       F
4  4       F
5  5       E
0 голосов
/ 03 июля 2018

Мы могли бы использовать числовой «ID» в качестве индекса, чтобы изменить значения в «Письмах» на значения «букв2» (которые все являются «F»)

df1$Letters[df2$ID] <- df2$letters2
df1
#  ID Letters
#1  1       F
#2  2       B
#3  3       F
#4  4       F
#5  5       E

Или используя data.table

library(data.table)
setDT(df1)[df2, Letters := Letters2, on = .(ID)]
df1
#   ID Letters
#1:  1       F
#2:  3       F
#3:  2       C
#4:  4       F
#5:  5       E
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...