#r #merge
#r #слияние
Вопрос:
У меня есть два DF, и я хочу объединить их, используя условия ссылки из двух разных столбцов. Используя «name» и «product_ID», я хочу добавить общее количество из второго DF в первый.
DF «Подробно»
Имя product_ID Сумма Apple 011 5 Apple 11 10 Apple 011 20 Оранжевый 011 10 Оранжевый 011 5
Общие сведения о DF
Имя product_ID Итого Apple 011 50 Apple 11 25 Оранжевый 011 20
Я хочу: DF подробно
Имя product_ID Сумма итого Apple 011 5 50 Apple 11 10 25 Apple 011 20 50 Оранжевый 011 10 20 Оранжевый 011 5 20
Когда я бы использовал только 1 условие, я бы использовал деталь слияния <- merge(Detail, General[, C(«Name», «total»)], «Name», all.X=TRUE)
Я не знаю, как заставить его использовать как «Name», так и product_ID.
Я думал, что я мог бы также создать новый столбец, в который я добавляю «Name» и «product_ID» в один столбец, но я не знаю, как добавить два фактора вместе в отдельный столбец.
Надеюсь, вы сможете мне помочь
Ответ №1:
Вот tidyverse
решение для вас, которое использует join
вместо merge
, но оно отлично справляется с задачей.
Ваш комбинированный подход действительно хорошая идея, если вы не хотите использовать tidyverse. Если ваш df имеет factor
s вместо character
s, как в этом решении, вы можете просто преобразовать их с помощью as.character
Обещанное решение:
library(tidyverse)
general <- read_table('Name product_ID Amount
Apple 011 5
Apple 11 10
Apple 011 20
Orange 011 10
Orange 011 5')
detail <- read_table('Name product_ID Total
Apple 011 50
Apple 11 25
Orange 011 20')
df <- general %>%
full_join(detail)
#> Joining, by = c("Name", "product_ID")
df
#> # A tibble: 5 x 4
#> Name product_ID Amount Total
#> <chr> <chr> <dbl> <dbl>
#> 1 Apple 011 5 50
#> 2 Apple 11 10 25
#> 3 Apple 011 20 50
#> 4 Orange 011 10 20
#> 5 Orange 011 5 20
Создано 2021-03-12 пакетом reprex (версия 0.3.0)