无法将变量通过管道传递到级别

Cannot pipe variable to levels

我正在处理一个大型数据框,而不是将操作写入内存,我一直在尝试尽可能多地使用管道。在尝试检查中间步骤中的因子水平时,我 运行 使用 levels 函数遇到了一个问题,想知道是否有人知道问题出在哪里。

一个例子:

library(dplyr)
Data <- data.frame(x = rep(LETTERS[1:5],3),
                   y = sample(1:10,length(x), replace=T))

通常的工作方式:

levels(Data$x)
[1] "A" "B" "C" "D" "E"

如果我使用 sapply:

 Data %>% select(x) %>% sapply(levels)
     x  
[1,] "A"
[2,] "B"
[3,] "C"
[4,] "D"
[5,] "E"

但是管道不起作用并且 returns NULL:

Data %>% select(x) %>% levels()
NULL

为什么 Data %>% select(x) %>% levels() return NULL?

有没有办法对管道数据使用级别?

select 给出了一个数据框,但是 levels 期望一个向量作为参数,这就是为什么它们不能一起工作;将 levelspipe 一起使用:

您可以使用 .$x 在级别方法中提取列:

Data %>% select(x) %>% {levels(.$x)}
# [1] "A" "B" "C" "D" "E"

或者更好的方法是使用 pull 而不是 selectpull 将列作为 vector/factor:

Data %>% pull(x) %>% levels()
# [1] "A" "B" "C" "D" "E"