R-Lookup сопоставляет значения в другом кадре данных, а затем объединяет их в исходные, создавая новые переменные - PullRequest
0 голосов
/ 24 февраля 2020
race <- data.frame (id  = c('xxxxx','yyyyy','zzzzz','ppppp','qqqqq','rrrrr'),
                  height = c(180,195,165,172,170,181),
                  weight = c(75,80,60,75,75,80),
                  bodytype  = c('M','L','M','S','M','L'),
                  country = c('US','CA','MX','MX','AG','US'),
                  speed = c(100,120,110,95,100,120),
                  best_id = c('aaaaa','bbbbb','ccccc','ccccc','ddddd','aaaaa')
)

race_best <- data.frame (id  = c('aaaaa','bbbbb','ccccc','ddddd','eeeee','fffff'),
                         height = c(185,195,180,175,182,180),
                         weight = c(72,79,70,65,68,71),
                         bodytype  = c('M','M','M','S','L','L')

)


race_updated <-  data.frame (id  = c('xxxxx','yyyyy','zzzzz','ppppp','qqqqq','rrrrr'),
                             height = c(180,195,165,172,170,181),
                             weight = c(75,80,60,75,75,80),
                             bodytype  = c('M','L','M','S','M','L'),
                             country = c('US','CA','MX','MX','AG','US'),
                             speed = c(100,120,110,95,100,120),
                             best_id = c('aaaaa','bbbbb','ccccc','ccccc','ddddd','aaaaa'),
                             best_id_height = c(185,195,180,180,175,185),
                             best_id_weight = c(72,79,70,70,65,72),
                             best_id_bodytype  = c('M','M','M','M','S','M')

)

У меня есть фрейм данных под названием "раса", в котором у меня есть несколько переменных, которые описывают характеристики конкретного гонщика c (рост, вес и c.). Переменная id - это уникальный идентификатор гонщика. Существует также переменная с именем best_id, которая является идентификатором гонщика с предыдущей лучшей скоростью (в категории, в которой находится текущий гонщик). Чтобы объяснить лучше, я добавил еще два набора данных. Race_best - это набор данных для лучших гонщиков. Race_updated - это то, чего я хочу достичь. Оригинальный набор данных (гонщик) и новые переменные, которые определяют характеристики лучшего гонщика. Например, best_id_height - это высота гонщика, соответствующая best_id и так далее. Было бы здорово, если бы кто-то помог мне с этой проблемой.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2020
library(dplyr)

race_updated <- left_join(race, race_best, by = c("best_id" = "id") )
1 голос
/ 25 февраля 2020

Опция, использующая объединение поиска в data.table, чтобы новые столбцы также имели соответствующие имена:

library(data.table)
setDT(race)[setDT(race_best), on=.(best_id=id), 
    paste0("best_", names(race_best)) := mget(paste0("i.", names(race_best)))]
race
...