我正在处理一个大型数据框,而不是将操作写入内存,我一直在尝试使用管道做与 I 一样多的工作。在尝试在中间步骤中检查我的因子水平时,我在使用 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"

但是管道不起作用并返回 NULL :
Data %>% select(x) %>% levels()
NULL

为什么 Data %>% select(x) %>% levels() 返回 NULL

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

最佳答案

select 给出了一个数据框,但 levels 需要一个向量作为参数,这就是它们不能一起工作的原因;将 levelspipe 一起使用:

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

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

或者更好的方法是使用 pull 而不是 selectpull 将列作为向量/因子:
Data %>% pull(x) %>% levels()
# [1] "A" "B" "C" "D" "E"

关于r - 无法通过管道将变量传递到级别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46085258/

10-12 13:57