36

ここにベクトルがあります

a <- c(TRUE, FALSE, FALSE, NA, FALSE, TRUE, NA, FALSE, TRUE)

「a」に a があるたびに、および「a」にaまたは aがあるたびに戻る単純な関数がTRUE欲しいです。TRUEFALSEFALSENA

次の3つのことは機能しません

a == TRUE
identical(TRUE, a)
isTRUE(a)

ここに解決策があります

a[-which(is.na(a))]

しかし、それは簡単で簡単な解決策ではないようです

別の解決策はありますか?

私が知っているいくつかの関数(および演算子)を次に示します。

identical()
isTRUE()
is.na()
na.rm()
&
|
!
  • を扱うのに役立つその他の関数 (演算子、ヒントなど)TRUEFALSENAですかNaN?

  • NAとはどう違いNaNますか?

  • TRUEFALSE、以外に「論理的なもの」はNAありNaNますか?

どうもありがとう !

4

5 に答える 5

63

関数で何もラップする必要はありません-次のように機能します

a = c(T,F,NA)

a %in% TRUE

[1]  TRUE FALSE FALSE
于 2014-11-19T11:33:05.160 に答える
9

したがって、TRUE を TRUE のままにし、FALSE を FALSE のままにしたい場合、実際の唯一の変更は NA を FALSE にする必要があるため、次のように変更します。

a[ is.na(a) ] <- FALSE

または、TRUE であり、欠落していない場合にのみ TRUE であると言い換えることもできます。

a <- a & !is.na(a)
于 2013-05-29T20:32:57.987 に答える
7

上記の Ben Bolker の提案を利用すると、is.na()構文に従って独自の関数を設定できます

is.true <- function(x) {
  !is.na(x) & x
}

a = c(T,F,F,NA,F,T,NA,F,T)

is.true(a)
[1]  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE

これは、データのサブセット化にも機能します。

b = c(1:9)
df <- as.data.frame(cbind(a,b))

df[is.true(df$a),]

  a b
1 1 1
6 1 6
9 1 9

また、NA がデータに存在する場合に空の行を誤って組み込むことを回避するのに役立ちます。

df[df$a == TRUE,]

      a  b
1     1  1
NA   NA NA
6     1  6
NA.1 NA NA
9     1  9
于 2014-11-12T00:27:17.060 に答える
7

私は is.element-function が好きです:

is.element(a, T)
于 2015-06-11T13:21:24.443 に答える