data.frame 객체 ( mydf
) 의 일부 열의 형식 (클래스 )을 charactor 에서 factor 로 변경하고 싶습니다 .
read.table()
함수로 텍스트 파일을 읽을 때이 작업을 수행하고 싶지 않습니다 .
도움을 주시면 감사하겠습니다.
답변
R의 세계에 오신 것을 환영합니다
mtcars #look at this built in data set
str(mtcars) #allows you to see the classes of the variables (all numeric)
#one approach it to index with the $ sign and the as.factor function
mtcars$am <- as.factor(mtcars$am)
#another approach
mtcars[, 'cyl'] <- as.factor(mtcars[, 'cyl'])
str(mtcars) # now look at the classes
이것은 문자, 날짜, 정수 및 기타 클래스에서도 작동합니다.
R을 처음 사용하기 때문에 다음 두 웹 사이트를 살펴 보는 것이 좋습니다.
R 참조 매뉴얼 :
http://cran.r-project.org/manuals.html
R 참조 카드 : http://cran.r-project.org/doc/contrib/Short-refcard.pdf
답변
# To do it for all names
df[] <- lapply( df, factor) # the "[]" keeps the dataframe structure
col_names <- names(df)
# do do it for some names in a vector named 'col_names'
df[col_names] <- lapply(df[col_names] , factor)
설명. 모든 데이터 프레임은 목록이며 [
여러 값을 갖는 인수와 함께 사용 된 결과 도 마찬가지로 목록이므로 목록을 반복하는 작업은 다음과 같습니다 lapply
. 위의 할당은 함수 data.frame.[<-
가 데이터 프레임에 성공적으로 다시 붙여야 하는 일련의 목록을 만듭니다.df
또 다른 전략은 고유 항목의 수가 일부 기준보다 적은 열만 변환하는 것입니다. 예를 들어 행 수의 로그보다 적습니다.
cols.to.factor <- sapply( df, function(col) length(unique(col)) < log10(length(col)) )
df[ cols.to.factor] <- lapply(df[ cols.to.factor] , factor)
답변
dplyr::mutate_if()
모든 문자 열을 변환하거나 dplyr::mutate_at()
명명 된 문자 열을 요인으로 선택 하는 데 사용할 수 있습니다 .
library(dplyr)
# all character columns to factor:
df <- mutate_if(df, is.character, as.factor)
# select character columns 'char1', 'char2', etc. to factor:
df <- mutate_at(df, vars(char1, char2), as.factor)
답변
data.frame의 모든 문자 변수를 이미 데이터를로드 한 후 요인 으로 변경하려면 다음과 같은 data.frame으로이를 수행 할 수 있습니다 dat
.
character_vars <- lapply(dat, class) == "character"
dat[, character_vars] <- lapply(dat[, character_vars], as.factor)
클래스의 열을 식별하는 벡터를 만든 character
다음 as.factor
해당 열에 적용 합니다.
샘플 데이터 :
dat <- data.frame(var1 = c("a", "b"),
var2 = c("hi", "low"),
var3 = c(0, 0.1),
stringsAsFactors = FALSE
)
답변
사용할 수있는 또 다른 짧은 방법 %<>%
은 magrittr 패키지 의 파이프 ( )입니다 . 문자 열 mycolumn 을 인수 로 변환합니다 .
library(magrittr)
mydf$mycolumn %<>% factor
답변
나는 기능으로 그것을하고있다. 이 경우 문자 변수 만 인자로 변환합니다.
for (i in 1:ncol(data)){
if(is.character(data[,i])){
data[,i]=factor(data[,i])
}
}