我正在处理一个大型数据框,而不是将操作写入内存,我一直在尝试使用管道做与 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
需要一个向量作为参数,这就是它们不能一起工作的原因;将 levels
与 pipe
一起使用:
您可以使用 .$x
在 levels 方法中提取列:
Data %>% select(x) %>% {levels(.$x)}
# [1] "A" "B" "C" "D" "E"
或者更好的方法是使用
pull
而不是 select
,pull
将列作为向量/因子:Data %>% pull(x) %>% levels()
# [1] "A" "B" "C" "D" "E"
关于r - 无法通过管道将变量传递到级别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46085258/