Получить уникальный идентификатор из другого фрейма данных - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть этот фрейм данных:

First.Name  Last.Name   Country   Unit  Hospital
  John        Mars        UK     Sales   South
  John        Mars        UK     Sales   South
  John        Mars        UK     Sales   South
  Lisa        Smith       USA    HHRR    North
  Lisa        Smith       USA    HHRR    North

и другие:

First.Name  Last.Name   ID
 John        Valjean    1254
 Peter       Smith      1255
 Frank       Mars       1256
 Marie       Valjean    1257
 Lisa        Smith      1258
 John        Mars       1259

, и я хотел бы объединить их или вставить их вместе, чтобы получить: enter image description here

Я пытался с x = merge(df1, df2, by.y=c('Last.Name','First.Name'), но, похоже, он не работает.также с x = df1[c(df1$Last.Name, df1$First.Name) %in% c(df2$Last.Name, df2$First.Name),], и он также не работает.

1 Ответ

0 голосов
/ 17 декабря 2018

При использовании merge вы должны быть осторожны с его аргументами, особенно с by, by.x, by.y, all, all.x и all.y.Описание каждого из этих аргументов доступно здесь

Основываясь на этом, попробуйте:

merge(df1, df2, by = c('First.Name', 'Last.Name')) # see @Sotos's comment
# output
  First.Name Last.Name Country  Unit Hospital   ID
1       John      Mars      UK Sales    South 1259
2       John      Mars      UK Sales    South 1259
3       John      Mars      UK Sales    South 1259
4       Lisa     Smith     USA  HHRR    North 1258
5       Lisa     Smith     USA  HHRR    North 1258

merge(df1, df2, by.x = c('Last.Name','First.Name'),
      by.y = c('Last.Name','First.Name')) # in you code, you set by.y but not by.x
# output
  Last.Name First.Name Country  Unit Hospital   ID
1      Mars       John      UK Sales    South 1259
2      Mars       John      UK Sales    South 1259
3      Mars       John      UK Sales    South 1259
4     Smith       Lisa     USA  HHRR    North 1258
5     Smith       Lisa     USA  HHRR    North 1258

# by in dplyr::left_join() works like by in merge()
dplyr::left_join(df1, df2, by = c('First.Name', 'Last.Name')) # see @tmfmnk's comment
# output
  First.Name Last.Name Country  Unit Hospital   ID
1       John      Mars      UK Sales    South 1259
2       John      Mars      UK Sales    South 1259
3       John      Mars      UK Sales    South 1259
4       Lisa     Smith     USA  HHRR    North 1258
5       Lisa     Smith     USA  HHRR    North 1258

Данные

df1 <- structure(list(First.Name = c("John", "John", "John", "Lisa", 
"Lisa"), Last.Name = c("Mars", "Mars", "Mars", "Smith", "Smith"
), Country = c("UK", "UK", "UK", "USA", "USA"), Unit = c("Sales", 
"Sales", "Sales", "HHRR", "HHRR"), Hospital = c("South", "South", 
"South", "North", "North")), .Names = c("First.Name", "Last.Name", 
"Country", "Unit", "Hospital"), class = "data.frame", row.names = c(NA, 
-5L))

df2 <- structure(list(First.Name = c("John", "Peter", "Frank", "Marie", 
"Lisa", "John"), Last.Name = c("Valjean", "Smith", "Mars", "Valjean", 
"Smith", "Mars"), ID = 1254:1259), .Names = c("First.Name", "Last.Name", 
"ID"), class = "data.frame", row.names = c(NA, -6L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...