我正在使用两个大数据文件,每个文件都有>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
的频率为621
和0
。我使用相同的数据进行分类,其中显示了六个类,而不是四个对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
我尝试将this和this与许多其他问题合并,但这给了我一条错误消息。我在这里Practical limits of R data frame发现这是R的局限性。
答案 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有关?