dplyr::选择一列并输出为向量 [复制]

dplyr::select one column and output as vector [duplicate]

提问人:zx8754 提问时间:11/26/2014 最后编辑:zx8754 更新时间:10/27/2017 访问量:44279

问:

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

目前,我必须执行额外的步骤()才能将其从data.frame转换为vector,请参阅以下示例:res <- res$y

#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"
r 选择 矢量 数据帧 dplyr

评论

1赞 zx8754 11/26/2014
@Henrik 是的,你是对的。我看到了那个帖子,不知何故无法复制,因此这篇文章。现在它起作用了!.df %>% filter(x>5) %>% select(y) %>% .[["y"]]
3赞 nacnudus 9/17/2015
这不是重复的。另一个问题特定于具有数据库后端的表,其中此问题 () 的答案不起作用。%>% .$y

答:

9赞 LyzandeR 11/26/2014 #1

像这样的东西?

> res <- df %>% filter(x>5) %>% select(y) %>% sapply(as.character) %>% as.vector
> res
[1] "F" "G" "H" "I" "J"
> class(res)
[1] "character"
6赞 akrun 11/26/2014 #2

您也可以尝试

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

 class(res)
#[1] "character"
149赞 hadley 11/27/2014 #3

最好的方法(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)

评论

5赞 Andy 6/4/2015
在这种情况下,您能指出有关点运算符的文档吗?
2赞 hadley 6/6/2015
@Andy查看 magrittr 文档
20赞 ianmcook 6/28/2017
在 dplyr 0.7.0 中,您现在可以使用:pull()df %>% filter(x > 5) %>% pull(y)
3赞 lefft 11/8/2017
惊讶没有看到管道!如:%$%magrittr::df %>% filter(x>5) %$% y