[r] 데이터 프레임에서 숫자 열만 선택

다음과 같이 data.frame이 있다고 가정하십시오.

x <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20])

x에서 숫자 인 열만 어떻게 선택 하시겠습니까?



답변

편집 : 잘못된 조언을 사용하지 않도록 업데이트되었습니다 sapply.

데이터 프레임은리스트이므로리스트 적용 함수를 사용할 수 있습니다.

nums <- unlist(lapply(x, is.numeric))  

그런 다음 표준 하위 설정

x[ , nums]

## don't use sapply, even though it's less code
## nums <- sapply(x, is.numeric)

좀 더 관용적 인 현대식 R을 위해 지금 추천합니다

x[ , purrr::map_lgl(x, is.numeric)]

코드가 적고 R의 특정 단점을 반영하지 않으며 데이터베이스를 기반으로 한 티블에서 사용하기에 더 간단하고 강력합니다.

dplyr::select_if(x, is.numeric)


답변

dplyr 패키지의 select_if() 기능은 우아한 솔루션입니다.

library("dplyr")
select_if(x, is.numeric)


답변

Filter() 기본 패키지에서 해당 유스 케이스에 대한 완벽한 기능은 다음과 같습니다.

Filter(is.numeric, x)

또한 다음보다 훨씬 빠릅니다 select_if().

library(microbenchmark)
microbenchmark(
    dplyr::select_if(mtcars, is.numeric),
    Filter(is.numeric, mtcars)
)

는 내 컴퓨터에서 60 마이크로 초의 중간 값을 반환 Filter하고 21 000 마이크로 초 select_if(350 배 빠름)를 반환합니다 .


답변

열 이름에만 관심이있는 경우 다음을 사용하십시오.

names(dplyr::select_if(train,is.numeric))


답변

이것은 다른 답변에 대한 대체 코드입니다.

x[, sapply(x, class) == "numeric"]

data.table

x[, lapply(x, is.numeric) == TRUE, with = FALSE]


답변

library(purrr)
x <- x %>% keep(is.numeric)


답변

PCAmixdata 라이브러리에는 아래와 같이 주어진 데이터 프레임 “YourDataframe”의 정량적 (수치 적 데이터)과 질적 (범용 적 데이터)을 분할하는 functon splitmix가 있습니다.

install.packages("PCAmixdata")
library(PCAmixdata)
split <- splitmix(YourDataframe)
X1 <- split$X.quanti(Gives numerical columns in the dataset)
X2 <- split$X.quali (Gives categorical columns in the dataset)