У меня есть два кадра данных строк, которые выглядят так:
df1
firm_id user_id_source1
"1234" "abc"
"1234" "bcd"
"1234" "cde"
"1234" "def"
"1234" "fgh"
"2345" "zyx"
"2345" "yxw"
"2345" "xwv"
"2345" "wvu"
"2345" "vut"
И
df2
firm_id user_id_source2
"1234" "abc"
"1234" "bcd"
"1234" "ghi"
"1234" "hij"
"2345" "zyx"
"2345" "yxw"
"2345" "utr"
Есть много фирм, у каждой из которых есть много идентификаторов пользователей. Я ищу, чтобы объединить, где совпадают идентификатор пользователя, а затем остальные данные без потери каких-либо данных, потому что источник идентификатора пользователя важен. Вот так:
result
firm_id user_id_source1 user_id_source2
"1234" "abc" "abc"
"1234" "bcd" "bcd"
"1234" "cde" NA
"1234" "def" NA
"1234" "fgh" NA
"1234" NA "ghi"
"1234" NA "hij"
"2345" "zyx" "zyx"
"2345" "yxw" "yxw"
"2345" "xwv" NA
"2345" "wvu" NA
"2345" "vut" NA
"2345" NA "utr"
Я пробовал все типы объединения и слияния и не могу понять это. Любая помощь очень ценится. Спасибо.
РЕДАКТИРОВАТЬ: r-schifini ниже решил эту проблему. Спасибо. Я добавил
library(dplyr)
df <- df %>% arrange(firm_id, is.na(user_id_source1), is.na(user_id_source2))
, чтобы расположить в нужном порядке.
РЕДАКТИРОВАТЬ2: Я уже использовал dplyr, так что это не проблема для меня, но я подумал, что кто-то в будущем может захотетьсохранить его в базе R. Вот как отсортировать это в базе R.
df_ordered <- df[order(df$firm_id, is.na(df$user_id_source1), is.na(df$user_id_source2)),]