私はdata.frameオブジェクト(の一部の列の形式(クラス)を変更したいmydf
から)キャラクターに要因。
read.table()
関数でテキストファイルを読み込んでいるときに、これを実行したくありません。
任意の助けいただければ幸いです。
unclass
使用data.frame
します。
私はdata.frameオブジェクト(の一部の列の形式(クラス)を変更したいmydf
から)キャラクターに要因。
read.table()
関数でテキストファイルを読み込んでいるときに、これを実行したくありません。
任意の助けいただければ幸いです。
unclass
使用data.frame
します。
回答:
こんにちは、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は初めてなので、次の2つのWebサイトをご覧になることをお勧めします。
Rリファレンスマニュアル: http : //cran.r-project.org/manuals.html
R参照カード: http : //cran.r-project.org/doc/contrib/Short-refcard.pdf
mydf$col_names[i]
もmydf[,col_names[i]]
機能しません。)
mydf[, col_names]
これを行います
# 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)
length(col_names)==1
。その場合、df[,col_names]
は長さ1のリストではなく、自動的にベクトルに降格されlapply
、列全体ではなく、各エントリに対して操作を試みます。これはを使用することで防ぐことができますdf[,col_names,drop=FALSE]
。
df[col_names]
です。
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
)
stringsAsFactors = TRUE
が、これはread_excel()
、readxl
パッケージからでデータを読み取り、受け入れないランダムフォレストモデルをトレーニングする場合に役立ちます。文字変数。
もう1つの簡単な使用方法は%<>%
、magrittrパッケージのパイプ()です。文字列mycolumnを因子に変換します。
library(magrittr)
mydf$mycolumn %<>% factor
私は関数でそれをやった。この場合、文字変数のみを因子に変換します。
for (i in 1:ncol(data)){
if(is.character(data[,i])){
data[,i]=factor(data[,i])
}
}
[[i]]