如何在列中合并具有公共值的两个单独数据集

时间:2017-11-28 20:14:16

标签: r dataframe merge

您好我有两个数据集我想要合并。问题是我需要通过某列和列中的某些值来组合它们。他们都有一个名为player_id的列。一个数据集只有玩家ID。 First data set

第二个数据集包含玩家拥有的本垒打数和玩家ID。问题是第二个数据集有很多我不需要的不相关的玩家。所以我需要仅通过数据集1中的播放器ID合并它们。data set 2

这是我的代码,联合收割机不起作用,因为它带来了两个数据集中的所有玩家ID。

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 个答案:

答案 0 :(得分:1)

这是一个简单而常见的问题,请稍微搜索一下。你想要的是一个内部合并,只有id列同时保存数据。一个角色的变化就是差异。

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

或者,如果您想要保留播放器数据集中的所有内容(无论它们是否存在于本地运行中)而不是所有那些在本垒打数据集中,您可以这样做:

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

这一切都归结为代码的all部分。文档在?merge()中非常自我​​解释,这个问题在这里和其他地方得到了解答。

答案 1 :(得分:0)

您需要使用:

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

答案 2 :(得分:0)

你基本上拥有它,只需更改all参数以保留你感兴趣的那些:

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

答案 3 :(得分:0)

您需要的是左连接。我会使用dplyr包。

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