私は大きなデータセットに取り組んでおり、いくつかの行にはNAがあり、他の行には空白があります:
df <- data.frame(ID = c(1:7),
home_pc = c("","CB4 2DT", "NE5 7TH", "BY5 8IB", "DH4 6PB","MP9 7GH","KN4 5GH"),
start_pc = c(NA,"Home", "FC5 7YH","Home", "CB3 5TH", "BV6 5PB",NA),
end_pc = c(NA,"CB5 4FG","Home","","Home","",NA))
(start_pc列とend_pc列で)NAとブランクを一度に削除するにはどうすればよいですか?私は過去に使用しました:
df<- df[-which(is.na(df$start_pc)), ]
... NAを削除するには-空白を削除する同様のコマンドがありますか?
df[!(is.na(df$start_pc) | df$start_pc==""), ]
これは同じ構成です-NA
ではなく空の文字列をテストします。
これを試して:
df <- df[-which(df$start_pc == ""), ]
実際、コードを見ると、which
は必要ありませんが、代わりに否定を使用するため、次のように単純化できます。
df <- df[!(df$start_pc == ""), ]
df <- df[!is.na(df$start_pc), ]
そして、もちろん、次のようにこれら2つのステートメントを組み合わせることができます。
df <- df[!(df$start_pc == "" | is.na(df$start_pc)), ]
with
を使用してさらに簡素化します。
df <- with(df, df[!(start_pc == "" | is.na(start_pc)), ])
nzchar
を使用して、ゼロ以外の文字列の長さをテストすることもできます。
df <- with(df, df[!(nzchar(start_pc) | is.na(start_pc)), ])
免責事項:このコードはテストしていません。構文エラーがどこかにあるかどうかを教えてください
簡単なアプローチは、すべての空白セルをNAにして、完全なケースのみを保持することです。 na.omitの例を探すこともできます。これは広く議論されているトピックです。
df [df == ""] <-NA
df <-df [complete.cases(df)、]
別の解決策は、1つの変数に空白がある行を削除することです。
df <- subset(df, VAR != "")
Dplyrを使用したエレガントなソリューションは次のとおりです。
df %>%
# recode empty strings "" by NAs
na_if("") %>%
# remove NAs
na.omit