首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对数据中可能没有显示级别的数据使用forcat

对数据中可能没有显示级别的数据使用forcat
EN

Stack Overflow用户
提问于 2020-09-05 21:04:31
回答 2查看 121关注 0票数 1

我的数据在理论上是可能的,但在数据中不存在。我可以很容易地用base R表示这一点:

代码语言:javascript
复制
factor(c("test","test1","test2"), levels = c("test","test1","test2","test3"))

如果我列出它,我就会看到test3是0。这很好,并允许我编写函数,假设这些级别包括所有可能的结果,以防最终添加包含此级别的数据。

我不能在forcats中复制这个。首先,as_factor函数不接受任何附加参数:

代码语言:javascript
复制
forcats::as_factor(c("test","test1","test2"), levels = c("test","test1","test2","test3"))

上述情况会产生一个错误。

以下是一个警告(如果可能的话,我更希望在没有警告的情况下完成我的目标):

代码语言:javascript
复制
forcats::as_factor(c("test","test1","test2")) %>% forcats::fct_recode(`test` = "test", `tests` = "test1", `tests` = "test2", `tests` = "test3")

Warning message:
Unknown levels in `f`: test3 

forcats中是否有任何方法来处理理论上存在但在当时的数据中不一定存在的水平?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-05 21:10:42

如果我们想在factor中复制相同的行为,可以使用fct_expand

代码语言:javascript
复制
c("test","test1","test2") %>%
       forcats::fct_expand(c("test","test1","test2","test3"))
#[1] test  test1 test2
#Levels: test test1 test2 test3

关于...的使用(as_factor中的其他参数),实际上并没有使用它

代码语言:javascript
复制
library(forcats)
methods(as_factor)
#[1] as_factor.character* as_factor.factor*    as_factor.logical*   as_factor.numeric*  

现在,我们检查as_factor.character的代码

代码语言:javascript
复制
getAnywhere(as_factor.character)
function (x, ...) 
{
    structure(fct_inorder(x), label = attr(x, "label", exact = TRUE))
}

fct_inorder只接受'x‘,而不接受传递给...的任何其他参数。

在这里,我们可以直接使用fct_expand扩展factorcharacterlevels (转换为factor)。

票数 1
EN

Stack Overflow用户

发布于 2020-09-05 21:23:17

根据“阿克伦”的建议,我已经完成了我想要做的事情。见下面的例子:

代码语言:javascript
复制
test <- c("fruit","fruit","apple","drink","meat")
levels <- c(
  `Fruit` = "fruit",
  `Fruit` = "apple",
  `Drink` = "drink",
  `Vegetable` = "vegetable",
  `Meat` = "meat"
)

factor(test) %>% table()
factor(test) %>% forcats::fct_expand(levels) %>% table()
factor(test) %>% forcats::fct_expand(levels) %>% forcats::fct_recode(!!!levels) %>% table()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63758501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档