2016-05-09 16 views
0

以下のサンプルコードで、いくつかのNA値を持つデータフレームを作成した場所を確認してください。私のcolnames(test)[colSums(is.na(test))>0]はNAの値を持つ列の名前を私に与えます。私の質問は、私はサブセットのための数値または論理値を与える必要がある列名をサブセットするときですが、私は私のcolSumsが私に2つの出力を与えることに気付いた、論理的なもう1つは列自体の名前です。 colnamesは、私のcolSumsの論理部分だけをどのように取るのですか?ここRコロンと数値を論理値に変換する

test <- data.frame(matrix(rnorm(50), nrow = 5, ncol = 10)) 
colnames(test) <-c("xOne", "xtwo", "x3", "x4","x5","xsix","x7","x8","xnine","x10") 
test$x5[3:4] <-NA 
colnames(test)[colSums(is.na(test))>0] 

は、実際には出力が論理ベクトルである0

xOne xtwo x3 x4 x5 xsix x7 x8 xnine x10 
FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE 
+2

それぞれの結果に列が一致する名前の示す属性です。 'str(colSums(is.na(test))> 0)' –

+0

を参照してください。ドクターは言ったように、まだ論理値のベクトルを返すだけです。それはちょうど名前付きのベクトルなので、出力を見るのです。これはあなたのベクトルには影響しませんが、それは各アイテムに名前を付けることのできるベクターの機能です。 – giraffehere

+0

お互いにありがとう。私は今、論理ベクトルの名前の特徴を知っていました。 – XXavier

答えて

0

> colSums(is.na(試験))の出力です。名前を無視することができます。あなたが名前をしたくない場合は それでも、あなたは試すことができます:

as.logical(is.na(colSums(test))) 

私は元の関数を少し変更することに注意してください。

0

最初の行にされた名前を使用すると、属性名と論理ベクトルがある見る何

> attributes(colSums(is.na(test))>0) 
$names 
[1] "xOne" "xtwo" "x3" "x4" "x5" "xsix" "x7" "x8" "xnine" "x10" 
関連する問題