【问题标题】:Factor Level issues after filling data frame using match使用匹配填充数据框后的因子级别问题
【发布时间】: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 显示六个。同样,频率向我显示5126210 频率。我使用相同的数据进行分类,其中显示了六个类别而不是四个类别,这会对 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 与许多其他问题合并,但它给了我一条错误消息。我发现这里@9​​87654323@是R的限制。

【问题讨论】:

  • 函数 droplevels() 能解决你的问题吗?
  • 可能是as.character(y$Category)[match(x$ItemID,y$ItemID)]
  • @RuiBarradas 谢谢,它成功了。虽然我试图将其转换为字符但没有工作。如果您可以添加它作为答案,我会接受它。

标签: r dataframe merge


【解决方案1】:

我会从您的 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 有关?

【讨论】:

  • 谢谢,但正如我所提到的,加入和合并不适用于我的数据集。它总是在某种程度上崩溃。
猜你喜欢
  • 2011-03-31
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 2021-06-26
  • 2015-09-02
相关资源
最近更新 更多