mtcars %>% select(mpg) %>% class()
[1] "data.frame"
不同于:
x <- mtcars %>% select(mpg)
x$mpg %>% class
[1] "numeric"
我有一个包含多个操作的 dplyr 链。最后我需要 df$feature 的实际内容,而不是只有一个特征的数据框。
不起作用:
mtcars %>% select(mpg)$mpg
Error in .$select(mpg) : 3 arguments passed to '$' which requires 2
有没有办法在 dplyr 链中获取数值向量 mpg?这样我就不必创建一个由 dplyr 链定义的变量,然后像上面那样创建一个新变量 df$x。是否可以一次完成?
在这里,select
总是返回一个包含选定列的 data.frame
,即使它是单个列。如果我们不提取列,class
显然是 data.frame
。相反,我们可以使用 pull
将列提取为 vector
,现在 class
将是 class
列/向量
library(dplyr)
mtcars %>%
pull(mpg) %>%
class
#[1] "numeric"
如果我们使用 select
方法,则可以使用 $
或 提取列。[[
mtcars %>%
select(mpg) %>%
.$mpg
#or
#.[["mpg"]]
.
代表整个数据集
或者使用 magrittr
中的 extract2
mtcars %>%
select(mpg) %>%
magrittr::extract2('mpg')
或者其他选项包括 unlist
或 flatten_dbl
mtcars %>%
select(mpg) %>%
flatten_dbl