r - dplyr 在链中使用 $ 获得最终值(value),例如mtcars %>% 选择(mpg)$mpg

标签 r dplyr

<分区>

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')

或者其他选项包括 unlistflatten_dbl

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

关于r - dplyr 在链中使用 $ 获得最终值(value),例如mtcars %>% 选择(mpg)$mpg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59635812/

相关文章:

r - data.table 内/外连接与 NA 在双 bug 类型的连接列中?

用 NA 替换不需要的因子水平值

r - 连接 R 中两个值之间最接近的值

r - 如何通过 R 中的 dplyr/tidyverse 将分组行复制到列中?

r - 使用滞后开始合并重叠时间段并保持合并案例的变量?

c++ - Rcpp 精度问题

r - 上传,转换xlsx文件和下载结果 Shiny

linux - 对于唯一字段 1,折叠另一个字段中的非唯一条目

r - 如何使用 dplyr 和 lubridate 包按一系列给定日期计算事件记录?

r - 根据另一列中的匹配条件过滤列