2

データテーブルで行ごとの論理演算を実行する必要があります。これを例で説明しましょう。以下に示すようなデータテーブル(DT)があるとします

V1      V2        V3        V4      V5 
 AAE     CDG       2        0        0  
 AAE     CDG       2        5        5  
 AAE     ORY       2        4        4  
 AAE     ORY       2        0        0  
 AAE     ORY       2        5        5  
 AAE     ORY       2        3        3  

ここで、V5 の値に応じて、V6 列をデータ テーブルに追加します。これは論理演算です。私はそれをするためにこのようなことをしました-

DT[, V6 := if(V5 == 0){1
              }else if(V5 == 1){2
              }else if(V5 == 2){3
              }else if(V5 == 3){4
              }else if(V5 == 4){5
              }else if(V5 == 5){6}
    ]

しかし、これでは望ましい結果が得られません。

V1   V2        V3      V4        V5   V6
 AAE CDG       2        0        0     1
 AAE CDG       2        5        5     6
 AAE ORY       2        4        4     5
 AAE ORY       2        0        0     1
 AAE ORY       2        5        5     6
 AAE ORY       2        3        3     4

一方、次の結果が得られます-

 V1   V2       V3       V4       V5    V6
 AAE CDG       2        0        0     1
 AAE CDG       2        5        5     1
 AAE ORY       2        4        4     1
 AAE ORY       2        0        0     1
 AAE ORY       2        5        5     1
 AAE ORY       2        3        3     1

これは、一度に 1 つの値または行の値を動的に使用するのではなく、V5 の最初の値 (0) が論理演算で使用されるために発生します。[,J] 引数を変更して目的の結果を得るにはどうすればよいですか。for ループを使用してこれを行うことができますが、それは非常に非効率的な方法です。

4

3 に答える 3

1

これを試して:

dat <- read.table(
text= "V1      V2        V3        V4      V5 
  AAE     CDG       2        0        0  
  AAE     CDG       2        5        5  
  AAE     ORY       2        4        4  
  AAE     ORY       2        0        0  
  AAE     ORY       2        5        5  
  AAE     ORY       2        3        3",header=TRUE)

dat$V6 <- ifelse(dat$V5 == 0,1,
                 ifelse(dat$V5 == 1,2,
                        ifelse(dat$V5 == 2,3,
                               ifelse(dat$V5 == 3,4,
                                      ifelse(dat$V5 == 4,5,
                                             ifelse(dat$V5 == 5,6,NA))))))
于 2013-06-19T10:51:21.103 に答える