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

标签 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显示了六个。同样,频率显示 512621 以及 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 

我尝试合并 thisthis还有许多其他问题,但它给了我一条错误消息。我在这里找到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/

相关文章:

python - 通过 matplotlib 图表绘制 pandas 数据框并在图表上绘制点

python - 如何将字符串数据分类为整数?

r - 使用R提取字符串中 "+"和 "*"符号的位置

r - 按组填充多列的缺失值

r - 使用 GitHub API 从私有(private)模板创建存储库

javascript - 如何在Javascript中将多个json数组合并为一个数组swift子数组?

object - Ext.apply覆盖嵌套对象?

r - 获取矩阵行作为矩阵

python - 为一列中的多行生成不同的随机数

python - 合并和比较