【问题标题】:dplyr get final value using $ in a chain e.g. mtcars %>% select(mpg)$mpg [duplicate]dplyr 在链中使用 $ 获得最终值,例如mtcars %>% 选择(mpg)$mpg [重复]
【发布时间】:2020-04-25 09:30:49
【问题描述】:
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。是否可以一次性完成?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这里,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"]]
    

    . 代表整个数据集

    或者使用来自magrittrextract2

    mtcars %>%
         select(mpg) %>% 
         magrittr::extract2('mpg')
    

    或其他选项包括unlistflatten_dbl

    mtcars %>% 
        select(mpg) %>% 
        flatten_dbl
    

    【讨论】:

      【解决方案2】:

      除了pull,您可以使用unlist 将data.frame 的选定列转换为向量:

      mtcars %>% select(mpg) %>% unlist() %>% class
      
      [1] "numeric"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-17
        • 1970-01-01
        • 2012-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-29
        相关资源
        最近更新 更多