3

特定の値 (ここでは RATIO1 と RATIO 2) が NaN であるすべての行を取得して保持しようとしています。

次のようなデータフレームを検討してください

data.frame(ID=c(1,2,4,6,7),RATIO1=c(NaN,NaN,0.2,9.5,6), 
           RATIO2=c(NaN,NaN,0.5,NaN,6), RATIO3=c(0.3,0.2,4,NaN,5))

 ID RATIO1 RATIO2 RATIO3
1  1    NaN    NaN    0.3
2  2    NaN    NaN    0.2
3  4    0.2    0.5      4
4  6    9.5    NaN    NaN
5  7      6      6      5

こんな感じにしたい

 ID RATIO1 RATIO2 RATIO3
1  1    NaN    NaN    0.3
2  2    NaN    NaN    0.2

is.na() または complete.cases () を使用して作成できます <-これにより、行が削除されます。

どうも

4

4 に答える 4

6

apply()行を 1 つずつ調べて、完全にNaNsで構成されているかどうかを判断するために使用する 1 つの可能性を次に示します。

df[apply(df[2:3], 1, function(X) all(is.nan(X))),]
#   ID RATIO1 RATIO2 RATIO3
# 1  1    NaN    NaN    0.3
# 2  2    NaN    NaN    0.2
于 2013-01-03T23:29:13.033 に答える
6

NaN任意の文字値ではなく、実際に扱っていると仮定すると、次のようなことを試してください。

dat <- data.frame(ID=c(1,2,4,6,7),RATIO1=c(NaN,NaN,0.2,9.5,6), RATIO2=c(NaN,NaN,0.5,NaN,6), RATIO3=c(0.3,0.2,4,NaN,5))
> dat[is.nan(dat$RATIO1) & is.nan(dat$RATIO2),]
  ID RATIO1 RATIO2 RATIO3
1  1    NaN    NaN    0.3
2  2    NaN    NaN    0.2

is.finiteこの種のことを頻繁に行う場合にも役立ちます。

于 2013-01-03T23:29:27.337 に答える
1

Josh O'Briens による this に基づく拡張ソリューション。

df[rowSums(is.nan(as.matrix(df[2:3])))>1,]
#
# as.matrix because is.nan requires matrix  (but is.na doesn't)
# rowSums for speed gain
#
于 2013-01-04T08:31:58.297 に答える
0

これを使用できます:

df <- data.frame(ID=c(1,2,4,6,7),RATIO1=c(NaN,NaN,0.2,9.5,6), 
                   RATIO2=c(NaN,NaN,0.5,NaN,6), RATIO3=c(0.3,0.2,4,NaN,5))

df[is.nan(df$RATIO1) & is.nan(df$RATIO2),]

  ID RATIO1 RATIO2 RATIO3
1  1    NaN    NaN    0.3
2  2    NaN    NaN    0.2
于 2013-01-03T23:42:17.550 に答える