R NA値との数値比較rで不良サブセットを引き起こす
-
21-12-2019 - |
質問
誰かが私に説明することができますか?例えば:
employee <- c("Big Shot CEO", "Programmer","Intern","Guy Who Got Fired Last Week")
salary <- c( 10000000, 50000, 0, NA)
emp_salary <- data.frame(employee,salary)
# how many employees paid over 100K?
nrow(emp_salary[salary>100000,]) # Returns 2 instead of 1 -- why?
emp_salary[salary>100000,]
# returns a bogus row of all NA's (not "Guy Who Got Fired")
# employee salary
# 1 Big Shot CEO 1e+07
# NA <NA> <NA>
salary[salary>100000]
# returns:
# [1] 1e+07 NA
NA > 100000 #returns NA
.
この予期せぬ行動を考えると、上記の例で100Kを超える従業員数を数えるための好ましい方法は何ですか?
解決
まず、あなたはおそらく最初にcbind()
を望んでいません - それはあなたのすべての変数をキャラクターに強制します。
emp_salary <- data.frame(employee,salary)
.
2つの可能な解決策:
-
subset
は、基準がNA
: の場合を自動的に除外します。
nrow(subset(emp_salary,salary>1e5))
.
- 結果を直接数え、
na.rm=TRUE
: を使用します。
sum(salary>1e5,na.rm=TRUE)
.
ボーガス行の後ろの論理について:
-
bigsal <- salary>1e5
は、それが必要としなければならないNA
を含む論理ベクトルです(NA
値が基準を満たすかどうかを知る方法がないため)。 -
NA
sを含む論理ベクトルを含むデータフレームの行を索引付けするとき、これはおそらく文書の最も顕著なビットです(help("[")
から):数値、論理的または文字「NA」のインデックスが未知の要素を選択し、論理整数、数値、複素数、または文字の結果の対応する要素に「NA」を返し、リストに 'NULL'を返します。 。
help("[.data.frame")
を検索し、さらに便利なものは表示できませんでした。)
覚えておくと、索引付けが行われたら、Rは、論理ベクトルがsalary
列から作成されたという知識をもはや持っていないので、それが望むことができることを実行する方法はありません。他の列の値。 NA
を使用してNA
のすべての列に記入するという一見奇妙な動作について考える1つの方法があります.Rが行を完全に出る場合は、FALSE
の基準に対応します。それを保持している場合(そしてそれが数列を維持できず、他の列を落とすことができないことを覚えておいてください)、それはTRUE
である基準に対応します。基準がFALSE
もTRUE
でもない場合は、他の動作が理にかなっているのかを確認するのは難しいです...
所属していません StackOverflow