2017-06-27 6 views
0

私はRのことがかなり新しく、できるだけ効率的/可愛いコードを書くことを改善しようとしています。リストを書くことでデータフレームの列を反復する関数

私は以下のことを担当しています: データセットtrain.csvの "Age"属性と "Name"属性の欠損値を確認してください。

個別のリスト要素の各列に欠損値のインデックスを生成したいと考えています。私はこれを行うために次のコードを書いた。

list(which(is.na(train$Age))) 
list(which(is.na(train$Name))) 

私の腸は、コードの同じ行の書き込み多くのいくつかの繰り返しであれば、あなたはおそらく非常によく(異議を?)言葉を知らないことを私に伝えます。私は上記の「適用」を使用して上記を凝縮することができましたが、この機能はすべて列で動作し、2つの関心対象ではありません。

apply(train, 2, function(x) which(is.na(x))) 

I、あるいは、単にこれらの2つのカラムを持つ新しいデータフレームを作成することもできますが、それは完全にこの質問の目的に反し...任意のポインタのための非常に事前に

ありがとう!

答えて

0

あなただけの関心の列に適用を実行するには、

apply(train, 2, function(x) which(is.na(x))) 

apply(train[,c("Age", "Name")], 2, function(x) which(is.na(x))) 

に余分な説明を変更することができます。 train[,c("Age", "Name")]は前に何も( trainから すべて行を取りません ,)、「年齢」と「名前」の列( ,の後に保持する列の一覧)

train <- data.frame(Age = c(NA,"x100",NA), Name = c("b","c",NA)) 

my.is.na <- function(data.colname){ 
    apply(train[names(train) == data.colname], 2, function(x) which(is.na(x))) 
} 

その後、あなたは自分のデータセットの変数名で関数を呼び出すことができます、あなたがあなたのステートメントを使用して、以下のように修正することができる関数を作成するには

+0

どうもありがとうございました! – StaticNomad

0

> my.is.na("Name") 
Name 
    3 
> my.is.na("Age") 
    Age 
[1,] 1 
[2,] 3 

データ:

> train 
    Age Name 
1 <NA> b 
2 x100 c 
3 <NA> <NA> 
関連する問題