2016-08-12 13 views
-2

多くの行と列を持つ大きなデータフレームがあります。 NA/NaN。以下は、私が働いているデータフレームの小さな例です。R - rのデータフレーム行の任意の列にNAが存在するかどうかを確認し、その場合はその行を削除します。

team_id athlete_id GP tm_STL tm_TOV player_WS 
1 13304  75047 1  2  8   NaN 
2 13304  75048 1  2  8 0.28563827 
3 13304  75049 1  2  8   NaN 
4 13304  75050 1  2  8   NaN 
5 13304  75053 1  2  8 0.03861989 
6 13304  75060 1  2  8 -0.15530707 

...悪い例はいえNaNをのすべてが、この場合、最後の列に表示されているため。私はwhich(is.na(df$column_name))のアプローチに慣れていますが、個々の列からNA値を持つ行を取得していますが、データフレームの行の少なくとも1つの列にNA値がある行についても同様です。

ありがとうございます!

+3

'na.omit'または' complete.cases' – alistaire

答えて

8

complete.casesを試してみてください。

> df <- data.frame(col1 = c(1, 2, 3, NA, 5), col2 = c('A', 'B', NA, 'C', 'D'), 
      col3 = c(9, NaN, 8, 7, 6)) 
> df 
    col1 col2 col3 
1 1 A 9 
2 2 B NaN 
3 3 <NA> 8 
4 NA C 7 
5 5 D 6 
> df[complete.cases(df), ] 
    col1 col2 col3 
1 1 A 9 
5 5 D 6 
+0

'complete.cases'は残りの部分より速いはずです – akrun

7

na.omit作品:あなたは配管なら、それはdplyr::filtermagrittr::extract、または[のようなサブセットために別の機能を必要としないよう

na.omit(df) 
## team_id athlete_id GP tm_STL tm_TOV player_WS 
## 2 13304  75048 1  2  8 0.28563827 
## 5 13304  75053 1  2  8 0.03861989 
## 6 13304  75060 1  2  8 -0.15530707 

それは、complete.casesより少し便利です。

1

これは使用できます。

df[rowSums(is.na(df))==0,] 

# team_id athlete_id GP tm_STL tm_TOV player_WS 
#2 13304  75048 1  2  8 0.28563827 
#5 13304  75053 1  2  8 0.03861989 
#6 13304  75060 1  2  8 -0.15530707 

このようにして、行ごとにNAsの数をカウントします。あなたは非-NAsの合計がゼロである行だけを保持します。

関連する問題