Programing

dplyr tbl 열을 벡터로 추출

crosscheck 2020. 6. 17. 08:02
반응형

dplyr tbl 열을 벡터로 추출


데이터베이스 백엔드가있는 tbl에서 dplyr tbl의 한 열을 벡터로 얻는 더 간결한 방법이 있습니까?

require(dplyr)
db <- src_sqlite(tempfile(), create = TRUE)
iris2 <- copy_to(db, iris)
iris2$Species
# NULL

너무 쉬웠을 겁니다

collect(select(iris2, Species))[, 1]
# [1] "setosa"     "setosa"     "setosa"     "setosa"  etc.

그러나 약간 서투른 것 같습니다.


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"]]

unlist열 이름을 반복하거나 색인을 지정할 필요가 없으므로 읽기 쉬운 것을 사용할 수도 있습니다 .

iris2 %>% select(Species) %>% unlist(use.names = FALSE)

아마 쓸 것입니다 :

collect(select(iris2, Species))[[1]]

dplyr은 tbls의 데이터를 처리하도록 설계되었으므로 단일 데이터 열을 얻는 더 좋은 방법은 없습니다.


extract2편의 기능을 magrittr다음 같이 사용합니다 .

library(magrittr)
library(dplyr)

iris2 %>%
  select(Species) %>%
  extract2(1)  

@ Luke1018은 다음 중 한 가지 의견으로이 솔루션을 제안했습니다.

magrittr노출 연산자 ( %$%)를 사용하여 데이터 프레임에서 벡터를 가져올 수도 있습니다 .

예를 들면 다음과 같습니다.

iris2 %>% select(Species) %>% collect() %$% Species

나는 그것이 그 자신의 대답이 가치가 있다고 생각했다.

참고 URL : https://stackoverflow.com/questions/21618423/extract-a-dplyr-tbl-column-as-a-vector

반응형