Как объединить два набора данных на основе значения ключа в R - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть два набора данных, содержащих информацию о списках Airbnb на основе идентификаторов этих списков. Первый набор данных, «календарь», включает в себя для каждого идентификатора и каждой даты на 365 дней вперед, цену и доступность списка. Имеет 4159641 рядов и 4 столбца. Второй набор данных «Списки» включает в себя для тех же идентификаторов несколько характеристик, таких как долгота, широта, емкость и т. Д. c. Он содержит 8903 строки и 9 переменных.

На основании этих общих идентификаторов я хотел бы объединить два набора данных, чтобы вся информация из второго набора данных «Списки» была включена в первый в «календаре». ». Точнее, для каждой строки из x списка данных и цены я хочу включить информацию о долготе, широте, пропускной способности и т. Д. c. В этом наборе данных будет 4159641 строка и 12 столбцов.

Буду очень признателен всем, кто поможет мне в этом.

Спасибо!

календарный набор данных Набор данных списка

Ответы [ 3 ]

1 голос
/ 11 апреля 2020

Вы можете попробовать следующее:

library(dplyr)
calendar <- read.csv2(...)
listings <- read.csv2(...)

joined_data <- inner_join(calendar, listings, by="ID")

Общее использование:

join_type(first_data_set, second_data_set, by=column_to_join_on)

Помните о join_type:

  • inner_join, объединит первую и вторую таблицы на основе предиката соединения
  • left_join, примет все значения из first_data_set и сопоставит их с записями из second_data_set , в случае отсутствия совпадений NULL появится
  • right_join, противоположно left_join
  • ...,

Есть еще, вы можете проверить их самостоятельно в упаковке. Но для вас может подойти inner_join или left_join.

0 голосов
/ 11 апреля 2020

Другой вариант - data.table

library(data.table)
setDT(df1)[dfd2, on = .(ID)]
0 голосов
/ 11 апреля 2020

Это левое соединение, так как вам нужно столько строк, сколько наблюдений в df1. Есть много способов сделать это:

База R

Это также работает с объектом data.table (merge расширен для этого класса объектов)

merge(df1, df2, all.x = TRUE, by = 'ID)

dplyr

library(dplyr)
df1 %>% left_join(df2, by = 'ID')

Я советую вам взглянуть на этот пост , где вы можете найти обсуждения других типов объединения (внутренний, правый ...)

...