欠落している観測を含むデータ フレームから行をサブセット化しようとしていました。特定の基準を満たす行を選択できます。ただし、 を使用すると、同じ基準を満たさない行を選択できませんでした!
。最終的に、 を使用して、目的の基準を満たさない行を除外することができました-
。
で目的の行を除外する方法はあり!
ますか?
データセットの例を次に示します。
df = read.table(text = "
state county var1.a var2.a var1.b var2.b
1 1 10 25 20 25
1 2 20 15 20 15
2 1 30 NA 40 25
2 2 40 35 10 35
3 1 20 45 10 NA
3 2 20 55 20 55
4 1 NA 65 NA NA
4 2 80 NA 30 NA
5 1 NA 15 NA 15
5 2 NA 15 NA 35
", na.strings = "NA", header = TRUE)
# 1. works, selects Rows 2, 6 and 9, rows in which columns 3 and 5 are the same and
# columns 4 and 6 are the same
df[ (which( ( ((df$var1.a == df$var1.b) | (is.na(df$var1.a) & is.na(df$var1.b))) &
((df$var2.a == df$var2.b) | (is.na(df$var2.a) & is.na(df$var2.b))) ) , arr.ind=TRUE)),]
# 2. does not work when excluding Rows 2, 6 and 9, does not retain Row 7
df[ (which(!( ((df$var1.a == df$var1.b) | (is.na(df$var1.a) & is.na(df$var1.b))) &
((df$var2.a == df$var2.b) | (is.na(df$var2.a) & is.na(df$var2.b))) ) , arr.ind=TRUE)),]
# 3. does not work, does not select any rows
df[!(which( ( ((df$var1.a == df$var1.b) | (is.na(df$var1.a) & is.na(df$var1.b))) &
((df$var2.a == df$var2.b) | (is.na(df$var2.a) & is.na(df$var2.b))) ) , arr.ind=TRUE)),]
# 4. works, selects Rows 1,3,4,5,7,8,10
df[-(which( ( ((df$var1.a == df$var1.b) | (is.na(df$var1.a) & is.na(df$var1.b))) &
((df$var2.a == df$var2.b) | (is.na(df$var2.a) & is.na(df$var2.b))) ) , arr.ind=TRUE)),]
上記の 2 番目のwhich
ステートメントは、次の理由で行 7 を選択しません。
( ((df$var1.a == df$var1.b) | (is.na(df$var1.a) & is.na(df$var1.b))) &
((df$var2.a == df$var2.b) | (is.na(df$var2.a) & is.na(df$var2.b))) )
戻り値:
# [1] FALSE TRUE FALSE FALSE FALSE TRUE NA FALSE TRUE FALSE
!
ですから、その場合になぜ機能しないのか理解できたと思います。しかし、取得方法がわかりません:
# [1] FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE
which
行 1、3、4、5、8、10 に加えて行 7 も返すように 2 番目のステートメントを変更するにはどうすればよいですか? which
欠落している観測がない場合、 2 番目のステートメントは機能します。
3 番目のwhich
ステートメントは、観測値の欠落がない場合でも機能しません。-
行または列を削除するために使用されることを知っています。!
そして、それは論理的な比較のためであることを知っています。which
3 番目のステートメントは論理比較の要件を満たしていないと思いますが、2 番目のwhich
ステートメントは満たしています。
最初のwhich
ステートメントを使用して目的の基準を満たす行を選択し、4 番目のwhich
ステートメントを使用して目的の基準を満たさない行を選択できると思います。ただし、を使用して、目的の基準を満たさない行を選択する方法を知りたい!
です。