Векторизовать добавление новой переменной переменных из другого набора данных в зависимости от значений первого набора данных в R

У меня есть набор данных «df» со многими наблюдениями и несколькими переменными, включая некоторые почтовые индексы (в некоторых случаях повторяющиеся несколько раз) и другой набор данных «df2» с координатами этих почтовых индексов. Я хочу добавить две новые переменные в свой первый набор данных «df» с координатами этих почтовых индексов, но, учитывая тот огромный объем данных, который у меня есть, это занимает слишком много времени с циклом. Я хотел бы знать, могу ли я каким-то образом векторизовать его, сохраняя при этом структуру фрейма данных и не превращаясь в матрицу. Прилагаю упрощенную версию того, чего хочу добиться.

# This dataset has my variables (removed the rest for simplicity)
df <- data.frame(pc = c("00001", "00002", "00003", 
                        "00001", "00002", "00003", 
                        "00001", "00002", "00003"))
     pc
1 00001
2 00002
3 00003
4 00001
5 00002
6 00003
7 00001
8 00002
9 00003

#This dataset holds the coordinates
df2 <- data.frame(pc = c("00001", "00002", "00003"),
                 lat = c(1, 2, 3),
                 long = c(4, 5, 6))
     pc lat long
1 00001   1    4
2 00002   2    5
3 00003   3    6

#This is the dataset I need
good.df <- data.frame(pc = c("00001", "00002", "00003", 
                             "00001", "00002", "00003", 
                             "00001", "00002", "00003"),
                      lat = c(1, 2, 3, 1, 2, 3, 1, 2, 3),
                      long = c(4, 5, 6, 4, 5, 6, 4, 5, 6))
     pc lat long
1 00001   1    4
2 00002   2    5
3 00003   3    6
4 00001   1    4
5 00002   2    5
6 00003   3    6
7 00001   1    4
8 00002   2    5
9 00003   3    6 

Я искал решение в течение довольно долгого времени, но, учитывая, что я не знаю, как правильно задать вопрос, у меня пока не было успеха. Я был бы очень признателен за некоторые рекомендации здесь.

Спасибо

То, что вы описываете, называется левым соединением. Вы можете найти много ответов о том, как это сделать, выполнив поиск здесь по запросу «R left join».

Allan Cameron 22.04.2022 20:30
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
2
1
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы могли бы использовать left_join из пакета dplyr. Присоединяюсь pc:

library(dplyr)
left_join(df, df2, by = "pc")
     pc lat long
1 00001   1    4
2 00002   2    5
3 00003   3    6
4 00001   1    4
5 00002   2    5
6 00003   3    6
7 00001   1    4
8 00002   2    5
9 00003   3    6

Это сэкономило буквально 2 часа времени, спасибо.

Verdi Esteban Rey Blanco 22.04.2022 21:38

Другие вопросы по теме