我是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是唯一的,我也可以将数据框放在彼此之上,但在这种情况下,我必须手动为每个数据框中的缺失类别创建列。是否可以自动检查类别列表,如果数据框中没有带有该名称的变量,则创建该变量,这样我就可以将数据框放在彼此之上,而不是进行连接。
非常感谢任何帮助。