データフレームにいくつか結果があります。私はいくつかの因子列と多くの数値列を持っています。 this質問への回答ごとに、数値列を数値に変換して簡単に索引付けすることができます。データフレームの列をインデックス付き因数に変換する
#create example data
df = data.frame(replicate(1000,sample(1:10,1000,rep=TRUE)))
df$X1 = LETTERS[df$X1]
df$X2 = LETTERS[df$X2]
df$X3 = LETTERS[df$X3]
df[-1] <- sapply(df[-1], function(x) ifelse(runif(length(x)) < 0.1, NA, x))
#find columns that are factors
factornames = c("X1", "X2", "X3")
factorfilt = names(df) %in% factornames
#convert non-factor columns to numeric
df[, !factorfilt] = as.numeric(as.character(unlist(df[, !factorfilt])))
しかし、私は私の因子の列に同じことをやりたいとき、私は同じインデックスが仕事を得るカント:
#convert factor columns to factor
df[, factorfilt] = as.factor(as.character(unlist(df[, factorfilt])))
class(df$X1)
[1] "character"
df[, factorfilt] = as.factor(as.character(df[, factorfilt]))
class(df$X1)
[1] "character"
df[, factorfilt] = as.factor(unlist(df[, factorfilt]))
class(df$X1)
[1] "character"
df[, factorfilt] = as.factor(df[, factorfilt])
Error in sort.list(y) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?
これらの戻り"character"
のすべて私が実行している場合は一方で、私は、class(df$X1)
を呼び出す場合df$X1= as.factor(df$X1)
これは"factor"
を返します。
as.factor
を呼び出すと、このようなインデックス作成が機能しないのはなぜですか。as.numeric
に電話をかけた場合はどうなりますか?
'as.factor'や' as.character'などは 'vector'では動作し、' data.frame'では動作しません。あなたは列をループしてから 'factor'を実行する必要があります – akrun
なぜ' unlist'がそこにあるのですか? – Leo
akrunのコメントに続いて、 'lapply'を使って選択したカラムを実行し、強制を実行します:' df [、factorfilt] < - lapply(df [、factorfilt]、as.factor) '。 – lmo