使用匹配填充数据框后的因子级问题

时间:2018-10-24 14:18:24

标签: r dataframe merge

我正在使用两个大数据文件,每个文件都有>2m个记录。样本数据帧是

x <- data.frame("ItemID" = c(1,2,1,1,3,4,2,3,4,1), "SessionID" = c(111,112,111,112,113,114,114,115,115,115), "Avg" = c(1.0,0.45,0.5,0.5,0.46,0.34,0.5,0.6,0.10,0.15),"Category" =c(0,0,0,0,0,0,0,0,0,0))
y <- data.frame("ItemID" = c(1,2,3,4,3,4,5,7),"Category" = c("1","0","S","120","S","120","512","621"))

我使用以下命令成功填充了x$Category

x$Category <- y$Category[match(x$ItemID,y$ItemID)]

但是

x$Category

给我

[1] 1   0   1   1   S   120 0   S   120 1  
Levels: 0 1 120 512 621 S

x中只有四个不同的类别,但是Levels显示了六个。同样,频率显示512的频率为6210。我使用相同的数据进行分类,其中显示了六个类,而不是四个对f度量和召回率产生负面影响的类。

table(x$Category)
0   1 120 512 621   S 
2   4   2   0   0   2 

我想

table(x$Category)
0   1 120  S 
2   4   2  2 

我尝试将thisthis与许多其他问题合并,但这给了我一条错误消息。我在这里Practical limits of R data frame发现这是R的局限性。

1 个答案:

答案 0 :(得分:2)

我会从x data.frame中省略Category列,因为它似乎仅用作占位符,直到填入y data.frame中的值为止。然后,您可以使用dplyr的left_join并将ItemID用作关键变量,然后是TingITangIBob建议的droplevels()。

这使您关闭,但是我的桌子与您的桌子不完全匹配:

dplyr::select(x, -Category) %>%
dplyr::left_join(y, by = "ItemID") %>%
droplevels()

0 1 120秒

2 4 4 4

我认为这可能与x中重复的ItemID有关?