我正在使用两个大数据文件,每个文件都有 >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 的局限性。
最佳答案
我会省略 x data.frame 中的 Category 列,因为它似乎只充当占位符,直到填充 y data.frame 中的值。然后,您可以使用 dplyr 中的 left_join 和 ItemID 作为key 变量,后跟 droplevels(),如 TingITangIBob 建议的那样。
这让你很接近,但我的 table 与你的不完全匹配:
dplyr::select(x, -Category) %>%
dplyr::left_join(y, by = "ItemID") %>%
droplevels()
0 1 120 S
2 4 4 4
我认为这可能与 x 中的重复 ItemID 有关?
关于r - 使用匹配填充数据框后的因子级别问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52971318/