在r中连接具有相同列名的数据帧

时间:2014-11-09 20:46:21

标签: r join

我是R的新手并尝试将3个数据框连接在一起,这些数据框具有相同名称的列。 以下是数据框的示例。

dfA =

user_id    log_id    Coding    Games    Storytelling    NA
001        1234      1          1             0         0
001        1235      0          0             1         0
002        1236      1          1             1         0
002        1237      0          0             0         1

dfB =

user_id    log_id    Coding    Media   Storytelling  NA
003        1238      0          1           1        0         
003        1239      0          0           0        1         
003        1240      1          1           1        0         
004        1241      0          1           0        0         
004        1242      1          1           1        0         

dfC =

user_id    log_id   Numbers   Search   Storytelling    NA
001        1243      1          1             0         0
001        1244      0          0             1         0
003        1245      1          1             0         0
005        1246      0          0             0         1
006        1247      0          0             1         0
006        1248      1          0             1         1
007        1249      0          0             0         1

我需要通过user_id和log_id加入这些数据框,以获得以下产品。

user_id  log_id  Coding  Media    Number    Search   Games     Storytelling    NA
 001      1234     1      0         0         0        1            0          0
 001      1235     0      0         0         0        0            1          0
 001      1243     0      0         1         1        0            0          0
 001      1244     0      0         0         0        0            1          0
 002      1236     1      0         0         0        1            1          0
 002      1237     0      0         0         0        0            0          1
 003      1238     0      1         0         0        0            1          0
 003      1239     0      0         0         0        0            0          1
 003      1240     1      1         0         0        0            1          0
 003      1245     0      0         1         1        0            0          0
 004      1241     0      1         0         0        0            0          0
 004      1242     1      1         0         0        0            1          0
 005      1246     0      0         0         0        0            0          1
 006      1247     0      0         0         0        0            1          0
 006      1248     0      0         1         0        0            1          1
 007      1249     0      0         0         0        0            0          1

除user_id和log_id之外的数据框中的列是类别,可能的总类别是

Total_Category = Coding, Games, Storytelling, Search, Media, Number, NA

当我通过user_id和log_id加入3个数据帧时,具有相同名称的变量会在连接中被覆盖。我不知道如何解决这个问题。

datalist_final = list(dfA, dfB, dfC)
final_user_logs = Reduce(function(...)
  {
  join(...,by=c("user_id", "log_id"), type="full")
  }, datalist_final)

我正在考虑将每个数据帧中的变量重命名为coding_dfA,coding_dfB,coding_dfC,然后进行连接,然后在连接后添加coding_dfA,coding_dfB和coding_dfC以进行“编码”,但这将是一个很多硬编码,如果在下一次运行中,任何数据框中的任何类别都会发生变化,那么我必须改变一切。

我能想到的另一件事是使用rbind。由于user_id和log_id是唯一的,我也可以将数据框放在彼此之上,但在这种情况下,我必须手动为每个数据框中的缺失类别创建列。是否可以自动检查类别列表,如果数据框中没有带有该名称的变量,则创建该变量,这样我就可以将数据框放在彼此之上,而不是进行连接。

非常感谢任何帮助。

0 个答案:

没有答案