2

どのように分析すればよいかわからないデータがあります。現在Excelにあり、Rで作業するにはいじる必要があると確信しています。ターゲットのセット、サイズ、色があります。また、各ターゲットのユーザー、状態、およびそのスコアもあります。

したがって、最初のテーブルは次のようになります。

Target, 1, 2, 3, 4, 5 ...
Size,   L, M, L, S, L ...
Color   R, B, G, B, R ...

次に、ユーザー ID の列、デバイスの列、各ターゲットのスコアの列を持つすべてのユーザー データを取得します。

User, Condition, 1, 2, 3, ...
1     A          5, 2, 8, ...
1     D          2, 4, 6, ...
2     A          1, 4, 6, ...
2     B          5, 8, 3, ...

私は主に 4 つの条件間で ANOVA を実行したいので、たとえば L ターゲットまたは R ターゲットで平均スコアが同じかどうかを確認します。

このようなデータをフィルタリングまたは検索するために 2 番目のテーブルを使用する必要はありませんでした。どうすればいいですか?

4

2 に答える 2

2

迅速で汚い解決策(誰かがループを回避するよりエレガントな解決策を確実に提案すると信じているため):

tab1 <- list(Target=1:5, Size=c("L","M","L","S","L"), Color=c("R","B","G","B","R"))
tab2 <- data.frame(rep(1:2, each=2), c("A","D","A","B"),
                   c(5,2,1,5), c(2,4,4,8), c(8,6,6,3))
names(tab2) <- c("User", "Condition", 1:3)

library(reshape)
tab2.melt <- melt(tab2, measure.vars=3:5)

for (i in 1:nrow(tab2.melt)) {
  tab2.melt$Size[i] <- tab1$Size[tab1$Target==as.numeric(tab2.melt$variable[i])]
  tab2.melt$Color[i] <- tab1$Color[tab1$Target==as.numeric(tab2.melt$variable[i])]    
}

データを R にインポートできると仮定していますが、データ構造が抜粋に示されているものと異なる場合は、上記のコードを変更することをお勧めします。基本的には、(i 番目のサブジェクトで) 繰り返される各測定の最終段階で必要な、TargetインデックスSizeとレベルへの方法としてコードを考慮することが考えられます。Colordata.frame

更新されたdata.frameものは次のようになります。

> head(tab2.melt)
  User Condition variable value Size Color
1    1         A        1     5    L     R
2    1         D        1     2    L     R
3    2         A        1     1    L     R
4    2         B        1     5    L     R
5    1         A        2     2    M     B
6    1         D        2     4    M     B

そこから、3 因子 ANOVA を実行したり、特定の対比を調査したりできます。

于 2012-05-18T19:01:09.857 に答える
2

考えられる代替ソリューションは、ルックアップ テーブルをデータフレームに結合することです。

1.いくつかのサンプル データ (彼の回答で使用された @chl と同じですが、ルックアップ値のリストではなくデータフレームを使用):

lut <- data.frame(Target=1:5, Size=c("L","M","L","S","L"), Color=c("R","B","G","B","R"))
df1 <- data.frame(rep(1:2, each=2), c("A","D","A","B"),
                   c(5,2,1,5), c(2,4,4,8), c(8,6,6,3))
names(df1) <- c("user", "condition", 1:3)

2. data.tableパッケージを使用すると、データフレームを data.table および長い形式に変換できます( reshape2同じように機能します) 。

dt.melt <- melt(setDT(df1), id=c("user","condition"),
                variable.factor = FALSE)[, variable := as.numeric(variable)]

3.Sizeと の一致する値をColor長いdata.tableに追加するために、ルックアップ テーブルと結合します。

dt.melt[lut, on = c("variable" = "Target"), nomatch=0]

また:

lut[dt.melt, on = c("Target" = "variable")]

どちらも次のようになります。

    user condition variable value Size Color
 1:    1         A        1     5    L     R
 2:    1         D        1     2    L     R
 3:    2         A        1     1    L     R
 4:    2         B        1     5    L     R
 5:    1         A        2     2    M     B
 6:    1         D        2     4    M     B
 7:    2         A        2     4    M     B
 8:    2         B        2     8    M     B
 9:    1         A        3     8    L     G
10:    1         D        3     6    L     G
11:    2         A        3     6    L     G
12:    2         B        3     3    L     G

これを 1 回の呼び出しでバインドすることもできます。

dt.melt <- melt(setDT(df1), id=c("user","condition"),
                variable.factor = FALSE)[, variable := as.numeric(variable)
                                         ][lut, on = c("variable" = "Target"), nomatch=0]

dplyrtidyrを組み合わせることで、同じことを実現できます。

library(dplyr)
library(tidyr)

df.new <- df1 %>% 
  gather(variable, value, -c(1:2)) %>% 
  mutate(variable = as.numeric(as.character(variable))) %>% 
  left_join(., lut, by = c("variable" = "Target"))

同じ結果が得られます。

> df.new
   user condition variable value Size Color
1     1         A        1     5    L     R
2     1         D        1     2    L     R
3     2         A        1     1    L     R
4     2         B        1     5    L     R
5     1         A        2     2    M     B
6     1         D        2     4    M     B
7     2         A        2     4    M     B
8     2         B        2     8    M     B
9     1         A        3     8    L     G
10    1         D        3     6    L     G
11    2         A        3     6    L     G
12    2         B        3     3    L     G
于 2015-12-08T15:44:53.870 に答える