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
'Programing' 카테고리의 다른 글
복합 기본 키의 Null 허용 열에 어떤 문제가 있습니까? (0) | 2020.06.18 |
---|---|
MissingManifestResourceException은 무슨 뜻이고 어떻게 해결 하죠? (0) | 2020.06.18 |
Windows의 Python 3에서 MySQL에 어떻게 연결할 수 있습니까? (0) | 2020.06.17 |
jQuery는 입력이 유형 체크 박스인지 확인합니까? (0) | 2020.06.17 |
문자열에 제로 패딩 추가 (0) | 2020.06.17 |