0

欠落している観測を含むデータ フレームから行をサブセット化しようとしていました。特定の基準を満たす行を選択できます。ただし、 を使用すると、同じ基準を満たさない行を選択できませんでした!。最終的に、 を使用して、目的の基準を満たさない行を除外することができました-

で目的の行を除外する方法はあり!ますか?

データセットの例を次に示します。

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ステートメントは、観測値の欠落がない場合でも機能しません。-行または列を削除するために使用されることを知っています。!そして、それは論理的な比較のためであることを知っています。which3 番目のステートメントは論理比較の要件を満たしていないと思いますが、2 番目のwhichステートメントは満たしています。

最初のwhichステートメントを使用して目的の基準を満たす行を選択し、4 番目のwhichステートメントを使用して目的の基準を満たさない行を選択できると思います。ただし、を使用して、目的の基準を満たさない行を選択する方法を知りたい!です。

4

2 に答える 2

0

私はここで間違っている可能性があります(私の電話からの書き込み)が、#2が機能しない理由は括弧が原因のようです。

これ!は、句の前半を否定するだけです。の直後に別の括弧のセットを追加し!、コンマの直前で閉じてみてください。

!また、それは単に論理値を反転していることを覚えておいてください。つまり、T / Fを交換し、NAをNAのままにします。

于 2013-02-23T05:25:32.993 に答える