web-dev-qa-db-ja.com

データフレームの選択された列にNA(欠損)値を含む行のサブセット

CSVファイルのデータフレームがあります。データフレームDFには、観測値を含む列と、測定が行われた日付を含む列(VaR2)があります。日付が記録されなかった場合、CSVファイルには欠落データの値NAが含まれます。

Var1  Var2 
10   2010/01/01
20   NA
30   2010/03/01

サブセットコマンドを使用して、列(new_DF)のNA'値を持つ行のみが含まれるように、新しいデータフレームVaR2を定義します。指定された例では、行2のみが新しいDFに含まれます。

コマンド

new_DF<-subset(DF,DF$Var2=="NA") 

機能しません。結果のデータフレームには行エントリがありません。

元のCSVファイルで、値NANULLと交換される場合、同じコマンドで目的の結果new_DF<-subset(DF,DF$Var2=="NULL")が生成されます。

文字列の値NAが元のCSVファイルで提供されている場合、このメソッドを機能させるにはどうすればよいですか?

82
John

欠損値をテストするために== 'NA'を使用しないでください。代わりにis.na()を使用してください。これはそれを行う必要があります:

new_DF <- DF[rowSums(is.na(DF)) > 0,]

または、特定の列を確認する場合は、使用することもできます

new_DF <- DF[is.na(DF$Var),]

NA文字値がある場合は、最初に実行します

Df[Df=='NA'] <- NA

欠損値でそれらを置き換えるために。

126
Joris Meys

NAはRの特別な値です。NA値と「NA」文字列を混同しないでください。データのインポート方法に応じて、「NA」および「NULL」セルはさまざまなタイプになります(デフォルトの動作では、「NA」文字列をNA値に変換し、「NULL」文字列をそのままにします)。

Read.table()またはread.csv()を使用する場合は、「na.strings」引数を考慮してクリーンなデータインポートを実行し、常に実際のR NA値を使用する必要があります。

例、「NULL」および「NA」セルの両方で動作する場合:

DF <- read.csv("file.csv", na.strings=c("NA", "NULL"))
new_DF <- subset(DF, is.na(DF$Var2))
36
maressyl

complete.casesは、行のすべての値がTRUEでない場合にNAを返します

DF[!complete.cases(DF), ]
25
user3226167
new_data <- data %>% filter_all(any_vars(is.na(.))) 

これにより、欠損値のみを含む新しいデータフレーム(new_data)が作成されます。

観測値が欠落している列(NA)があるため、後でドロップする可能性のある値を追跡するのに最適です。

5
Ronak Pol

これを変更してみてください:

new_DF<-dplyr::filter(DF,is.na(Var2)) 
3
drhnis