답변:
dplyr 0.7.0을 사용 pull
하면에서 벡터를 얻는 데 사용할 수 있습니다 tbl
.
library("dplyr")
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
db <- src_sqlite(tempfile(), create = TRUE)
iris2 <- copy_to(db, iris)
vec <- pull(iris2, Species)
head(vec)
#> [1] "setosa" "setosa" "setosa" "setosa" "setosa" "setosa"
@nacnudus의 의견 pull
에 따르면 dplyr 0.6에서 함수가 구현 된 것처럼 보입니다.
iris2 %>% pull(Species)
이전 버전의 dplyr의 경우 열을 조금 더 멋지게 끌어낼 수있는 깔끔한 기능이 있습니다 (쉽게 입력하고 읽기 쉽게).
pull <- function(x,y) {x[,if(is.name(substitute(y))) deparse(substitute(y)) else y, drop = FALSE][[1]]}
이를 통해 다음 중 하나를 수행 할 수 있습니다.
iris2 %>% pull('Species')
iris2 %>% pull(Species)
iris2 %>% pull(5)
를 야기하는...
[1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4
또한 데이터 프레임에서도 잘 작동합니다.
> mtcars %>% pull(5)
[1] 3.90 3.90 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 3.92 3.07 3.07 3.07 2.93 3.00 3.23 4.08 4.93 4.22 3.70 2.76 3.15 3.73 3.08 4.08 4.43
[28] 3.77 4.22 3.62 3.54 4.11
v0.2에서 이것을 수행하는 좋은 방법 dplyr
:
iris2 %>% select(Species) %>% collect %>% .[[5]]
또는 원하는 경우 :
iris2 %>% select(Species) %>% collect %>% .[["Species"]]
또는 테이블이 너무 크지 않으면 간단히 ...
iris2 %>% collect %>% .[["Species"]]
pull <- function(x, y) { if (ncol(x) == 1) y <- 1 else y x[ , if (is.name(substitute(y))) deparse(substitute(y)) else y, drop = FALSE][[1]] }
당신이 갈 수 있도록iris2 %>% pull()
magrittr
노출 연산자 ( %$%
)를 사용하여 데이터 프레임에서 벡터를 가져올 수도 있습니다 . 즉 iris2 %>% select(Species) %>% collect() %$% Species
.
pull()
dplyr 버전 0.6 github.com/tidyverse/dplyr/commit/
unlist
열 이름을 반복하거나 색인을 지정할 필요가 없으므로 읽기 쉬운 것을 사용할 수도 있습니다 .
iris2 %>% select(Species) %>% unlist(use.names = FALSE)
unlist
정확히 내가 필요한 것입니다. 감사!
unlist
또한 여러 열에서 값을 추출하고 (모든 값을 단일 벡터로 결합) dplyr::pull
단일 열로 제한됩니다.
아마 쓸 것입니다 :
collect(select(iris2, Species))[[1]]
dplyr은 tbls의 데이터를 처리하도록 설계되었으므로 단일 데이터 열을 얻는 더 좋은 방법은 없습니다.
group_by(column) %.% tally()
drop = TRUE
하는 dplyr::select
우리가 실제로 벡터를 추출 할 필요가 꽤 많은 사용 사례에 대한 놀라운 것입니다.
@ Luke1018은 다음 중 한 가지 의견으로이 솔루션을 제안했습니다.
magrittr
노출 연산자 (%$%
)를 사용하여 데이터 프레임에서 벡터를 가져올 수도 있습니다 .
예를 들면 다음과 같습니다.
iris2 %>% select(Species) %>% collect() %$% Species
나는 그것이 그 자신의 대답이 가치가 있다고 생각했다.
tibble(x = 1:10, y = letters[1:10]) %>% select_("x") %>% unlist()
와 %>% unname()
원하는 경우 끝에 다른 것을 추가 할 수도 있지만 내 목적으로 마지막 파이프 체인 링크가 필요하다는 것을 알지 못했습니다. 파이프 체인에 추가하는 것과 동일한 작업을 수행 use.names = FALSE
하는 unlist()
명령을 지정할 수도 있습니다 unname()
.
pull
지금 명령 을 사용합니다 . 내 솔루션은 dplyr
버전 0.6 이전에 작성되었습니다 .
%$%
반면은 어떤 목록 작동 pull()
하지 않습니다
인덱싱에 대괄호를 사용하는 데 익숙한 경우 또 다른 옵션은 deframe () 호출에서 일반적인 인덱싱 방법을 래핑하는 것입니다 .
library(tidyverse)
iris2 <- as_tibble(iris)
# using column name
deframe(iris2[, 'Sepal.Length'])
# [1] 5.1 4.9 4.7 4.6 5.0 5.4
# using column number
deframe(iris2[, 1])
# [1] 5.1 4.9 4.7 4.6 5.0 5.4
that과 pull () 은 모두 tibble column을 얻는 좋은 방법입니다.
collect(iris2)$Species
적은 서투른은?