2016-10-07 19 views
0

私のデータセットは60個の変数を持ち、各変数は5つのレベル(賛成、反対、中立、強く同意、強く同意する)の序数であり、レベルは" "。すべての列から不要なレベルを削除したい。私は、コードRを使用して列を更新するR

for (i in colnames(shopping[,11:60])){ 
    shopping$i <- factor(shopping$i) 
} 

を使用していますが、コードを実行した後、私は次のエラーを取得しています

$<-.data.frame*tmp*は、 "i" は、値が=整数(0))でエラー: 交換が持っています0行、データはあります。162

誰かが私を助けることができますか?

+0

'のため使用して明示的なループ(I COLNAMES中(ショッピング)[11:60])ショッピング[i]は、<なし解決できることを修正することができます - 因子(ショッピング[、I ]) ' – jogo

+1

' dput(shopping) 'を使ってデータを表示してください。 [mcve]を読んで質問を編集してください! – jogo

+1

'?droplevels'を見てみましょう –

答えて

0

for (i in seq_along(shopping[, 11:60])){ 

shopping[i] <- factor(shopping[[i]]) 

} 

あなたのループの問題を解決するために、これを試してみてくださいまた、これらの列の「」値はありますか?もしそうなら、あなたはdplyr

library(dplyr) 

var1 <- c('Agree', 'Disagree', 'Neutral', 'Strongly Agree', 'Strongly Disagree', '" "') 
var2 <- c('Agree', 'Disagree', 'Neutral', 'Strongly Agree', 'Strongly Disagree', '" "') 
df <- data.frame(var1, var2) 

       var1    var2 
1    Agree    Agree 
2   Disagree   Disagree 
3   Neutral   Neutral 
4 Strongly Agree Strongly Agree 
5 Strongly Disagree Strongly Disagree 
6    ""    "" 

df %>% 
    na_if(., '" "') %>% 
    na.omit() %>% 
    droplevels() 

       var1    var2 
1    Agree    Agree 
2   Disagree   Disagree 
3   Neutral   Neutral 
4 Strongly Agree Strongly Agree 
5 Strongly Disagree Strongly Disagree 
関連する問題