Как объединить два отдельных набора данных с общими значениями в столбце

Здравствуйте, у меня есть два набора данных, которые я пытаюсь объединить. Проблема в том, что мне нужно объединить их по определенному столбцу и определенным значениям в столбце. У них обоих есть столбец с именем player_id. Один набор данных имеет только идентификаторы игроков. Первый набор данных

Второй набор данных имеет количество домашних пробежек, которые имел игрок, и идентификатор игрока. Проблема в том, что во втором наборе данных есть тонна ненужных игроков, которые мне не нужны. Поэтому мне нужно объединить их только по идентификаторам игроков из набора данных 1. Набор данных 2

Вот мой код, комбинат не работает, потому что он приносит все идентификаторы игроков из обоих наборов данных.

player2 = subset(player, select = c(player_id, birth_state))

player.mt <- player[ which(player$birth_state =='MT'),]
player.mt2 = subset(player.mt, select = c(player_id))
batting.hr <- subset(batting, select = c(player_id, hr))
batting.hr

combine <- merge(player.mt2, batting.hr, by=c("player_id"), all=TRUE) 

4 ответа

Это простая и распространенная проблема, поищите ее немного. То, что вы хотите, это внутреннее слияние, где вы храните данные, только если столбец id находится в обоих. Одно изменение символа - это разница.

combine <- merge(player.mt2, batting.hr, by=c("player_id"), all=F) 

В качестве альтернативы, если вы хотите сохранить все данные из набора данных игрока (независимо от того, присутствовали ли они в homeruns или нет), а не все из набора данных homerun, вы можете сделать следующее:

combine <- merge(player.mt2, batting.hr, by=c("player_id"), all.x=T, all.y=F) 

Все сводится к all часть вашего кода. Документация довольно понятна в ?merge() и на этот вопрос ответят повсюду здесь и в других местах.

Что вам нужно, это левое соединение. Я бы использовал пакет dplyr.

combine <- left_join(player.mt2, battling.hr, by = "player_id")

Вам необходимо использовать:

combine<-plyr::join_all(list(player.mt2, batting.hr), by=c("player_id"),type="inner")

У вас это есть, просто измените аргумент all, чтобы сохранить интересующие вас:

combine <- merge(x=player.mt2, y=batting.hr, by=c("player_id"), all.x=TRUE) 
Другие вопросы по тегам