提问人:zx8754 提问时间:11/26/2014 最后编辑:zx8754 更新时间:10/27/2017 访问量:44279
dplyr::选择一列并输出为向量 [复制]
dplyr::select one column and output as vector [duplicate]
问:
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"
答:
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
评论
df %>% filter(x>5) %>% select(y) %>% .[["y"]]
%>% .$y