Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何合并列中具有公共值的两个独立数据集_R_Dataframe_Merge - Fatal编程技术网

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

R 如何合并列中具有公共值的两个独立数据集,r,dataframe,merge,R,Dataframe,Merge,您好,我有两个数据集,我正在尝试合并。问题是我需要将它们按特定列和列中的特定值组合。它们都有一个名为player_id的列。一个数据集只有player id。 第二个数据集有一个球员的本垒打数和球员id。问题是第二个数据集有大量我不需要的无关球员。所以我需要根据数据集1中的播放器ID合并它们 这是我的代码,联合收割机无法工作,因为它从两个数据集中带来了所有玩家ID player2 = subset(player, select = c(player_id, birth_state)) pla

您好,我有两个数据集,我正在尝试合并。问题是我需要将它们按特定列和列中的特定值组合。它们都有一个名为player_id的列。一个数据集只有player id。

第二个数据集有一个球员的本垒打数和球员id。问题是第二个数据集有大量我不需要的无关球员。所以我需要根据数据集1中的播放器ID合并它们

这是我的代码,联合收割机无法工作,因为它从两个数据集中带来了所有玩家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) 
您需要使用:

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

这是一个简单而常见的问题,请四处搜索一下。您需要的是一个内部合并,其中仅当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) 

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

您基本上已经拥有了它,只需更改all参数以保留您感兴趣的对象:

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

你需要的是一个左连接。我会使用dplyr包

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