【问题标题】:dplyr::select one column and output as vector [duplicate]dplyr::选择一列并作为向量输出[重复]
【发布时间】:2015-01-24 18:57:48
【问题描述】:

dplyr::select 产生一个data.frame,如果结果是一列,有没有办法让它返回一个向量?

目前,我必须做额外的步骤 (res <- res$y) 才能将其从 data.frame 转换为矢量,请参阅此示例:

#dummy data
df <- data.frame(x = 1:10, y = LETTERS[1:10], stringsAsFactors = FALSE)

#dplyr filter and select results in data.frame
res <- df %>% filter(x > 5) %>% select(y)
class(res)
#[1] "data.frame"

#desired result is a character vector
res <- res$y
class(res)
#[1] "character"

如下:

res <- df %>% filter(x > 5) %>% select(y) %>% as.character
res
# This gives strange output
[1] "c(\"F\", \"G\", \"H\", \"I\", \"J\")"

# I need:
# [1] "F" "G" "H" "I" "J"

【问题讨论】:

  • @Henrik 是的,你是对的。我看到那个帖子,不知何故无法复制,因此这个帖子。现在它起作用了! df %&gt;% filter(x&gt;5) %&gt;% select(y) %&gt;% .[["y"]].
  • 这不是重复的。另一个问题特定于具有数据库后端的表,该问题的答案 (%&gt;% .$y) 不起作用。

标签: r select vector dataframe dplyr


【解决方案1】:

最好的方法(IMO):

library(dplyr)
df <- data_frame(x = 1:10, y = LETTERS[1:10])

df %>% 
  filter(x > 5) %>% 
  .$y

在 dplyr 0.7.0 中,您现在可以使用 pull():

df %>% filter(x > 5) %>% pull(y)

【讨论】:

  • 您能否指出有关此上下文中点运算符的文档?
  • @Andy 查看 magrittr 文档
  • 在 dplyr 0.7.0 中,您现在可以使用 pull(): df %&gt;% filter(x &gt; 5) %&gt;% pull(y)
  • 很惊讶没有看到来自magrittr::%$% 管道!如:df %&gt;% filter(x&gt;5) %$% y
【解决方案2】:

这样的?

> res <- df %>% filter(x>5) %>% select(y) %>% sapply(as.character) %>% as.vector
> res
[1] "F" "G" "H" "I" "J"
> class(res)
[1] "character"

【讨论】:

    【解决方案3】:

    你也可以试试

    res <- df %>%
               filter(x>5) %>%
               select(y) %>%
               as.matrix() %>%
               c()
    #[1] "F" "G" "H" "I" "J"
    
     class(res)
    #[1] "character"
    

    【讨论】:

      猜你喜欢
      • 2021-10-15
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      相关资源
      最近更新 更多