1. ホーム
  2. r

[解決済み] NA の特定の列を含む行を省略する。

2022-04-27 11:07:40

質問

を省略する方法を教えてください。 NA の値は、データフレーム内の、私が関心を持ついくつかの列のみです。

例えば

DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))

というデータのみを省略したい。 yNA したがって、結果は次のようになるはずです。

  x  y  z
1 1  0 NA
2 2 10 33

na.omit を含む行はすべて削除されるようです。 NA .

この単純な質問から、誰か私を助けてくれませんか?

しかし、今、質問をこう変えたら。

DF <- data.frame(x = c(1, 2, 3,NA), y = c(1,0, 10, NA), z=c(43,NA, 33, NA))

のみを省略したい場合 x=na または z=na をどこに置けばいいのでしょうか? | を関数内で使用できますか?

どのように解決するのですか?

を使用することができます。 complete.cases 関数の中にこのように入れます。

DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))

completeFun <- function(data, desiredCols) {
  completeVec <- complete.cases(data[, desiredCols])
  return(data[completeVec, ])
}

completeFun(DF, "y")
#   x  y  z
# 1 1  0 NA
# 2 2 10 33

completeFun(DF, c("y", "z"))
#   x  y  z
# 2 2 10 33

EDITです。 がない行のみを返す。 NA s

が1つでもある行をすべて削除したい場合は、以下のようにします。 NA を使用すればよい。 complete.cases 関数をそのまま使用します。

DF[complete.cases(DF), ]
#   x  y  z
# 2 2 10 33

または、もし completeFun は、すでにあなたのワークフローに根付いています ;)

completeFun(DF, names(DF))