1

3つの条件で実験を行いました。現在、データは次のように編成されています。

| X | Y | Z |
|   | 1 |   |
|   | 0 |   |
| 0 |   |   |
| 0 |   |   |
|   |   | 1 |
|   |   | 1 |

次のようにしたいと思います。

| Y | 1 |
| Y | 0 |
| X | 0 |
| X | 0 |
| Z | 1 |
| Z | 1 |

これは、多くの分析でこの形式が必要と思われるためです。

かなり一般的なように見えるので、この変換を行う関数があることを願っています。

編集:

以下の形状変更の提案を使用してみましたが、問題が発生しています。構造への影響はないようです。私のデータは、構築されたテスト データと何らかの形で異なるはずですが、その方法がわかりません。

私はこれでいくつかの問題を抱えており、おそらくあなたが助けることができると思いました.

> simpleGame
   Q6.4 Q7.4 Q8.4
3               2
5               2
8          1     
11              2
13         1     
14    2          
16              1
17         1     
19    2          
23    2          
24              1
26    2          
28    2    

しかし、melt を実行しても何も変わらないようです。

> na.omit(melt(simpleGame))
Using Q6.4, Q7.4, Q8.4 as id variables
   Q6.4 Q7.4 Q8.4
1               2
2               2
3          1     
4               2
5          1     
6     2          
7               1
8          1     
9     2          
10    2          
11              1
12    2          
13    2   

どんな提案でも大歓迎です。

Edit2: 要求どおり、データ フレームの出力は次のとおりです。

> dput(simpleGame)
structure(list(Q6.4 = structure(c(1L, 1L, 1L, 1L, 1L, 3L, 1L, 
1L, 3L, 3L, 1L, 3L, 3L), .Label = c("", "1", "2", "Which do you choose?"
), class = "factor"), Q7.4 = structure(c(1L, 1L, 2L, 1L, 2L, 
1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L), .Label = c("", "1", "2", "Which do you choose?"
), class = "factor"), Q8.4 = structure(c(3L, 3L, 1L, 3L, 1L, 
1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L), .Label = c("", "1", "2", "Which do you choose?"
), class = "factor")), .Names = c("Q6.4", "Q7.4", "Q8.4"), row.names = c(3L, 
5L, 8L, 11L, 13L, 14L, 16L, 17L, 19L, 23L, 24L, 26L, 28L), class = "data.frame")

これらが実際に要因であるという事実と何か関係があるのではないかと考えていますか?data.frame 全体を数値に強制する方法はわかりませんが、おそらくそれでうまくいくと思います。

4

2 に答える 2

5

あなたのデータが次のような場合:

df <- structure(list(X = c(NA, NA, 0, 0, NA, NA), Y = c(1, 0, NA, NA, 
      NA, NA), Z = c(NA, NA, NA, NA, 1, 1)), .Names = c("X", "Y", "Z"
      ), class = "data.frame", row.names = c(NA, -6L))

これを試して:

na.omit(stack(df))
#    values ind
# 3       0   X
# 4       0   X
# 7       1   Y
# 8       0   Y
# 17      1   Z
# 18      1   Z

ご注文をご希望の場合:

na.omit(stack(df[c(2,1,3)]))[c(2,1)]
#    ind values
# 1    Y      1
# 2    Y      0
# 9    X      0
# 10   X      0
# 17   Z      1
# 18   Z      1
于 2013-03-13T15:16:19.333 に答える
4

reshape2@Arun データ構造の使用:

na.omit(melt(df))
Using  as id variables
   variable value
3         X     0
4         X     0
7         Y     1
8         Y     0
17        Z     1
18        Z     1

OP構造を使用して編集

dat.m <- melt(dat,measure.vars = c('Q6.4','Q7.4','Q8.4'))
dat.m[!(dat.m$value == ''),]

説明: すべての列が因子です。のデフォルトの動作meltは、因子列を ID として取得することです。回避策として、それらが測定可能な変数であることをmeltに伝えるのでmelt、行名をIDとして取得します。2 番目の部分については、値内に NA がないため、置き換えるだけです。空の文字しかありませna.omitん。!(dat.m$value == '')

于 2013-03-13T15:23:54.423 に答える