9

私の質問は、複数のダミー変数を単一のカテゴリ変数に結合することに関する以前に回答された質問の詳細に関するものです。

前の質問では、カテゴリ変数は、相互に排他的ではないダミー変数から作成されました。interaction私の場合、ダミー変数は相互に排他的です。これは、2X2 被験者間要因計画 (ここでは扱っていない被験者内コンポーネントも含む) の交差実験条件を表しているためです。する必要があります。

たとえば、私のデータは次のようになります。

id   conditionA    conditionB    conditionC     conditionD
1    NA            1             NA             NA
2    1             NA            NA             NA
3    NA            NA            1              NA
4    NA            NA            NA             1
5    NA            2             NA             NA
6    2             NA            NA             NA
7    NA            NA            2              NA
8    NA            NA            NA             2

ここで、ACROSS のさまざまなタイプの条件を組み合わせたカテゴリ変数を作成したいと思います。たとえば、状態 A と B の値を持つ人は 1 つのカテゴリ変数でコード化され、状態 C と D の値を持つ人はコード化される可能性があります。

id   conditionA    conditionB    conditionC     conditionD  factor1    factor2
1    NA            1             NA             NA          1          NA
2    1             NA            NA             NA          1          NA
3    NA            NA            1              NA          NA         1
4    NA            NA            NA             1           NA         1
5    NA            2             NA             NA          2          NA
6    2             NA            NA             NA          2          NA
7    NA            NA            2              NA          NA         2
8    NA            NA            NA             2           NA         2

現在、私はifelse()ステートメントを使用してこれを行っていますが、これは非常に混乱しています (常に機能するとは限りません)。助けてください!おそらく、非常に明白な「より簡単な方法」がいくつかあります。

編集:

ifelse私が使用しているコマンドの種類は次のとおりです。

attach(df)
df$factor<-ifelse(conditionA==1 | conditionB==1, 1, NA)
df$factor<-ifelse(conditionA==2 | conditionB==2, 2, df$factor)

実際には、毎回 6 ~ 8 列を組み合わせているため、より洗練されたソリューションが大いに役立ちます。

4

3 に答える 3

1

まあ、次のようなもので簡単にできると思いますifelse

factor1 <- ifelse(is.na(conditionA), conditionB, conditionA)

別の方法は次のとおりです。

factor1 <- conditionA
factor1[is.na(factor1)] <- conditionB

そして3番目の解決策は、2つ以上の列の条件がある場合、より実用的です:

factor1 <- apply(df[,c("conditionA","conditionB")], 1, sum, na.rm=TRUE)
于 2013-04-21T20:01:54.763 に答える
1

この関数で必要なものが得られると思います (確かに、これは簡単なハックです)。

to_indicator <- function(x, grp)
{
    apply(tbl, 1,
          function (x)
          {
              idx <- which(!is.na(x))
              nm <- names(idx)
              if (nm %in% grp)
                x[idx]
              else
                NA
          })
}

そして、これはあなたが提供したサンプルデータで使用されています。

tbl <- read.table(header=TRUE, text="
conditionA    conditionB    conditionC     conditionD
NA            1             NA             NA
1             NA            NA             NA
NA            NA            1              NA
NA            NA            NA             1
NA            2             NA             NA
2             NA            NA             NA
NA            NA            2              NA
NA            NA            NA             2")
tbl <- data.frame(tbl)

(tbl <- cbind(tbl,
              factor1=to_indicator(tbl, c("conditionA", "conditionB")),
              factor2=to_indicator(tbl, c("conditionC", "conditionD"))))
于 2013-04-21T20:02:54.077 に答える