我有7个带有运动统计数据的大数据框架。它们具有不同的行数和不同的列数,但是一些列具有相似的值(游戏ID,玩家ID,因此我创建了game_player_id来合并它们)。在这些数据框架中,有些行不存在(玩家没有玩过),而在其他行中它们存在,因为这些玩家被列为DNP。我想将这7个帧与所有玩家合并为一个大(有效而非有效)。 merge()适用于具有相同行数的帧,但在我尝试运行函数时它并不适用。结果我只得到了列名和
< 0行> (或0长度的row.names)
GAME_PLAYER_ID MIN AST
001001 86 1
001002 90 0
001003 30 0
001004 0 DNP
001005 90 2
GAME_PLAYER_ID MIN PASS
001001 86 25
001002 90 45
001003 30 25
001005 90 39
预期结果
GAME_PLAYER_ID MIN AST PASS
001001 86 1 25
001002 90 0 45
001003 30 0 25
001004 DNP DNP DNP/NA (whatever but not 0)
001005 90 2 39
问题出在哪里?如何以简单的方式做到这一点?我可能会编写一个函数,但它会很复杂(很多行,每个data.frame都有20多列),有没有可以帮我处理这些的软件包?
答案 0 :(得分:2)
您想要执行完整外部加入:What is the difference between "INNER JOIN" and "OUTER JOIN"?
> df1 = read.table(header = TRUE, text =
+ "GAME_PLAYER_ID MIN AST
+ 001001 86 1
+ 001002 90 0
+ 001003 30 0
+ 001004 0 DNP
+ 001005 90 2")
>
> df2 = read.table(header = TRUE, text =
+ "GAME_PLAYER_ID MIN PASS
+ 001001 86 25
+ 001002 90 45
+ 001003 30 25
+ 001005 90 39")
>
> df3 = merge(df1, df2, all = TRUE)
> df3
GAME_PLAYER_ID MIN AST PASS
1 1001 86 1 25
2 1002 90 0 45
3 1003 30 0 25
4 1004 0 DNP NA
5 1005 90 2 39
这会将NA
放入未由输入数据帧填充的任何单元格中。为了将来的参考,我已经多次回答这个问题:How to join (merge) data frames (inner, outer, left, right)?