これがベクトルです
a <- c(TRUE, FALSE, FALSE, NA, FALSE, TRUE, NA, FALSE, TRUE)
「a」にTRUE
があるたびにTRUE
を返し、FALSE
またはFALSE
があるたびにNA
を返す単純な関数が欲しい[$ var] _ in "a"。
次の3つのことは機能しません
a == TRUE
identical(TRUE, a)
isTRUE(a)
ここに解決策があります
a[-which(is.na(a))]
しかし、それは簡単で簡単な解決策ではないようです
別の解決策はありますか?
私が知っているいくつかの関数(および演算子)は次のとおりです。
identical()
isTRUE()
is.na()
na.rm()
&
|
!
TRUE
、FALSE
、NA
、NaN
を扱うのに役立つ他の関数(演算子、ヒントなど)は何ですか?
NA
とNaN
の違いは何ですか?
TRUE
、FALSE
、NA
、およびNaN
以外の「論理的なもの」はありますか?
どうもありがとう !
質問に順番に回答するには:
1)==
演算子は、NAを期待どおりに処理しません。非常に便利な関数は、このcompareNA
関数です r-cookbook.com :
compareNA <- function(v1,v2) {
# This function returns TRUE wherever elements are the same, including NA's,
# and false everywhere else.
same <- (v1 == v2) | (is.na(v1) & is.na(v2))
same[is.na(same)] <- FALSE
return(same)
}
2)NAは「使用不可」の略で、一般的なNaN(「not a number」)とは異なります。一般的に、NAは欠損データを表す番号のデフォルト値に使用されます。 NaNは通常、数値の問題(-1または同様のログを取る)のために生成されます。
3)「論理的なこと」の意味がよくわかりません。数値ベクトルなど、さまざまなデータ型を論理演算子への入力として使用できます。 R論理演算子ページ http://stat.ethz.ch/R-manual/R-patched/library/base/html/Logic.html を読んでみてください。
お役に立てれば!
関数で何かをラップする必要はありません-次のように動作します
a = c(T,F,NA)
a %in% TRUE
[1] TRUE FALSE FALSE
したがって、TRUEをTRUEに、FALSEをFALSEにしたい場合、唯一の本当の変更はNAがFALSEになる必要があることです。
a[ is.na(a) ] <- FALSE
または、TRUEであり、欠落していない場合にのみTRUEであると言い換えることができます。
a <- a & !is.na(a)
上記の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