【发布时间】:2018-10-24 14:18:23
【问题描述】:
我正在使用两个大型数据文件,每个文件都有>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 与许多其他问题合并,但它给了我一条错误消息。我发现这里@987654323@是R的限制。
【问题讨论】:
-
函数 droplevels() 能解决你的问题吗?
-
可能是
as.character(y$Category)[match(x$ItemID,y$ItemID)]。 -
@RuiBarradas 谢谢,它成功了。虽然我试图将其转换为字符但没有工作。如果您可以添加它作为答案,我会接受它。