Benim data.frame nesnesinin (bazı sütunların biçimi (sınıfı) değiştirmek isterdiniz mydf
itibaren) charactor için faktör .
Metin dosyasını read.table()
işleve göre okurken bunu yapmak istemiyorum .
Herhangi bir yardım memnuniyetle karşılanacaktır.
Benim data.frame nesnesinin (bazı sütunların biçimi (sınıfı) değiştirmek isterdiniz mydf
itibaren) charactor için faktör .
Metin dosyasını read.table()
işleve göre okurken bunu yapmak istemiyorum .
Herhangi bir yardım memnuniyetle karşılanacaktır.
unclass
ve data.frame
sonuçta kullanın .
Yanıtlar:
Merhaba R. dünyasına hoş geldiniz.
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
Bu aynı zamanda karakter, tarihler, tam sayılar ve diğer sınıflar için de geçerlidir.
R'de yeni olduğunuz için şu iki web sitesine göz atmanızı öneririm:
R referans kılavuzları: http://cran.r-project.org/manuals.html
R Referans kartı: http://cran.r-project.org/doc/contrib/Short-refcard.pdf
mydf$col_names[i]
de mydf[,col_names[i]]
çalışmaz.)
mydf[, col_names]
bunu yapacak
# To do it for all names
df[] <- lapply( df, factor) # the "[]" keeps the dataframe structure
col_names <- names(df)
# to do it for some names in a vector named 'col_names'
df[col_names] <- lapply(df[col_names] , factor)
Açıklama. Tüm veri çerçeveleri listelerdir ve [
birden çok değerli bağımsız değişkenle birlikte kullanılan sonuçlar da aynı şekilde listelerdir, bu nedenle listeler üzerinde döngü yapmak görevidir lapply
. Yukarıdaki atama, işlevin veri çerçevesine data.frame.[<-
başarıyla geri yapışması gereken bir dizi liste oluşturacaktır ,df
Başka bir strateji, yalnızca benzersiz öğe sayısının bazı kriterlerden daha az olduğu sütunları dönüştürmek olabilir, örnek olarak satır sayısı günlüğünden daha az diyelim:
cols.to.factor <- sapply( df, function(col) length(unique(col)) < log10(length(col)) )
df[ cols.to.factor] <- lapply(df[ cols.to.factor] , factor)
length(col_names)==1
. Bu durumda, df[,col_names]
1 uzunluğundaki bir liste yerine otomatik olarak bir vektöre indirgenir ve daha sonra lapply
bir bütün olarak sütun yerine her girdi üzerinde işlem yapmaya çalışır. Bu, kullanılarak önlenebilir df[,col_names,drop=FALSE]
.
df[col_names]
.
dplyr::mutate_if()
Tüm karakter sütunlarını dönüştürmek dplyr::mutate_at()
için veya adlandırılmış karakter sütunlarını faktörlere dönüştürmek için kullanabilirsiniz :
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)
Eğer değiştirmek isterseniz tüm zaten verilerinizi yüklü sonra faktörlere sizin data.frame karakter değişkenleri, adlı bir data.frame için böyle yapabilirsin dat
:
character_vars <- lapply(dat, class) == "character"
dat[, character_vars] <- lapply(dat[, character_vars], as.factor)
Bu, hangi sütunların sınıfta olduğunu tanımlayan bir vektör oluşturur character
ve ardından as.factor
bu sütunlara uygulanır .
Örnek veri:
dat <- data.frame(var1 = c("a", "b"),
var2 = c("hi", "low"),
var3 = c(0, 0.1),
stringsAsFactors = FALSE
)
stringsAsFactors = TRUE
, ama diyelim ki, sen ile veri okudum bu yararlıdır read_excel()
gelen readxl
paket ve kabul etmediğini rastgele orman modeli yetiştirmek istiyoruz karakter değişkenleri.
Kullanabileceğiniz başka bir kısa yol %<>%
, magrittr paketinden bir boru ( ) ' dur . Mycolumn karakter sütununu bir faktöre dönüştürür .
library(magrittr)
mydf$mycolumn %<>% factor
Bunu bir işlevle yapıyorum. Bu durumda, sadece karakter değişkenlerini çarpanlara çevireceğim:
for (i in 1:ncol(data)){
if(is.character(data[,i])){
data[,i]=factor(data[,i])
}
}
[[i]]