2017-10-09 2 views
0

大きなデータフレームからすべての因子変数を選択するために使用しているループを作成しました。しかし、何らかの理由で列を索引付けするためにカウンターを使用すると、要素として読み取られないため、ループは機能しません。どうしてこれなの?そして、どのように私は仕事にこのループを取得することができます:カウンタダミー変数を使用してアクセスすると、列が要因として読み取られないのはなぜですか?

#Here's the loop: 
y <- data.frame(c = 1:2661) 
for (i in 1:ncol(x)){ 
    ifelse(is.factor(x[i]) == FALSE, y <- cbind(y, x[i]), y <- y) 
} 

と問題が列を参照するために「I」を使用することで、明らかです。例:

#sample data 
df <- as.data.frame(structure(c(2L, 2L, 2L, 2L, 2L), 
          .Label = c("female", "male"), class = "factor")) 

names(df)[names(df) == "structure(c(2L, 2L, 2L, 2L, 2L), .Label = c(\"female\", \"male\"), class = \"factor\")"] <- "var" 

#reference the column name directly 
is.factor(df$var) 
[1] TRUE 
#use a counter to access the variable: 
i <- 1 
is.factor(df[i]) 
[1] FALSE 

これはRと何か関係ありますか、または私のPCに何かがありますか? Rと何か関係がある場合、誰が何が起こっているのか、私のループを機能させる方法を説明できるのでしょうか?

+0

をアセスするための2つのオプションがありますファクタは、 'is.factor(df [、i])'と書くだけです。列ではなく要素を詰め込むためにコンマを書いてください。 – R18

+0

をdf [i]とすると、data.frameが得られます.df [、i]を指定すると、プリミティブ型にカラムをドロップします。タイプ - >? "[" < - in R in more。 –

+0

[This posts](https://stackoverflow.com/questions/36777567/is-there-a-logical-way-to-think-about-list-indexing/36815401)も読む価値があります。 – lmo

答えて

1

オブジェクトのアクセス方法を変更するだけで済みます。あなたは、データフレームを使用しているので、あなたのi番目の列があるかどうかを確認したい場合は、列

1.

i <- 1 
is.factor(df[,i]) 

2.

i <- 1 
is.factor(df[[i]]) 
+0

ありがとう!それが解決策です。多分何が起こっていたのか説明できますか? –

+0

@stevezissou 'help(" [")'を読んでください。 – Roland

+0

@Rolandはhelp( "[")に答えがあります。しかし、あなたの質問に素早く答えるために、私の答えでは、1゜でdfを行列として扱います。ここで、df [index row、index column]と2ºdfはデータフレームとしてdf [[column]]と扱います。列を選択する他の形式はdf $ namecolumnとdf [["namecolumn"]]です。 –

関連する問題