web-dev-qa-db-ja.com

このデータフレーム内の2列の非NA値のみを取得してデータフレームをサブセット化する方法

データフレームの2列の整数値を取得して、データフレームをサブセットしようとしています。

Subs1<-subset(DATA,DATA[,2][!is.na(DATA[,2])] & DATA[,3][!is.na(DATA[,3])])

しかし、それは私にエラーを与えます:より長いオブジェクトの長さはより短いオブジェクトの長さの倍数ではありません。

列2および列3のNON NA値で構成されるサブセットを構築するにはどうすればよいですか?

どうもありがとう?

12
EnginO

これを試して:

_Subs1<-subset(DATA, (!is.na(DATA[,2])) & (!is.na(DATA[,3])))
_

subsetの2番目のパラメーターは、nrow(DATA)と同じ長さの論理ベクトルで、対応する行を保持するかどうかを示します。

19
cogitovita

Na.omit関数は、あなたの質問に対する答えになります

 Subs1 <- na.omit(DATA[2:3])

[ https://stat.ethz.ch/R-manual/R-patched/library/stats/html/na.fail.html]

5
Berecht

ここに例を示します。 a、b、cは3つのベクトルで、aとbには欠損値があります。それらが作成されたら、cbindを使用してそれらを1つのマトリックスにバインドし、後でデータフレームに変換できます。

最終結果は、3列のうち2列に欠損値があるデータフレームです。したがって、完全なケースを持つ行のみを保持する必要があります。すべての列に値が欠落していない行のみを保持するために、DATA[complete.cases(DATA), ]が使用されます。 subsetオブジェクトは、完全なケースを持つこれらの行です。

  a <- c(1,NA,2)
  b <- c(NA,1,2)
  c <- c(1,2,3)
  DATA <- as.data.frame(cbind(a,b,c))
  subset <-  DATA[complete.cases(DATA), ] 
3
krishnamurti