私の質問はこれと多少似ていると思います。cbind は、使用している (または値への参照を使用している) ベクトルの値を変更しています。基本的には、データ フレームからデータを取得し、特定の要因 (インターフェイス タイプ) に従って列に整理しています。レベルと関係があると思いますが、今のところそれらが何を意味するのかはわかりません。これが私がやっていることと私が得ている結果です:
#Grouping subjects number of collisions data according to the interface they used
> ui1NumCollisions = dout$numCollisions[ dout$Interface=="0"]
> ui2NumCollisions = dout$numCollisions[ dout$Interface=="1"]
> ui3NumCollisions = dout$numCollisions[ dout$Interface=="2"]
> ui4NumCollisions = dout$numCollisions[ dout$Interface=="3"]
#checking data
> ui1NumCollisions
[1] 43, 30, 37, 6, 22, 9, 19, 9, 14, 106, 50, 53,
33 Levels: -1, 10, 106, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 21, 22, ... 9,
> ui2NumCollisions
[1] 17, 16, 23, 12, 15, -1, 11, 26, 19, 32, 36, 13,
33 Levels: -1, 10, 106, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 21, 22, ... 9,
> ui3NumCollisions
[1] 17, 38, 16, 13, 42, 50, 10, 17, 2, 28, 14, 30,
33 Levels: -1, 10, 106, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 21, 22, ... 9,
> ui4NumCollisions
[1] 42, 28, 22, 36, 10, 25, 45, 48, 18, 11, 21, 7,
33 Levels: -1, 10, 106, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 21, 22, ... 9,
#Creates matrix with each column containing collision data for each interface
#(I think)
> uiNumCollisions = cbind( '1' = ui1NumCollisions
+ , '2' = ui2NumCollisions
+ , '3' = ui3NumCollisions
+ , '4' = ui4NumCollisions)
#checking matrix values
> uiNumCollisions
1 2 3 4
[1,] 26 10 10 25
[2,] 20 9 24 19
[3,] 23 16 9 15
[4,] 31 5 6 22
[5,] 15 8 25 2
[6,] 33 1 29 17
[7,] 12 4 2 27
[8,] 33 18 10 28
[9,] 7 12 13 11
[10,] 3 21 19 4
[11,] 29 22 7 14
[12,] 30 6 20 32
> uiNumCollisionsSummary = summary(uiNumCollisions)
> uiNumCollisionsSummary
1 2 3 4
Min. : 3.00 Min. : 1.00 Min. : 2.0 Min. : 2.00
1st Qu.:14.25 1st Qu.: 5.75 1st Qu.: 8.5 1st Qu.:13.25
Median :24.50 Median : 9.50 Median :11.5 Median :18.00
Mean :21.83 Mean :11.00 Mean :14.5 Mean :18.00
3rd Qu.:30.25 3rd Qu.:16.50 3rd Qu.:21.0 3rd Qu.:25.50
Max. :33.00 Max. :22.00 Max. :29.0 Max. :32.00
106 は列 1 の一部ではなく、最大値でもなく、代わりに 33 であることに注意してください。レベル テーブルから値のインデックスを取得しているようです。私が本当に欲しかったのは、価値そのものでした。これには、私が推測する簡単な答えが必要です。私はデータバインディングに関連する多くの問題を見ましたが、私が見つけたものを使用してこの問題の解決策を見つけることができませんでした. ここで何が欠けていますか?
助けてくれてありがとう。心から、
パウロ。
/------FOLLOW - DWin からの返信に基づく UP-------
返信いただきありがとうございます。data.frame を uiNumCollisions に適用するソリューションは、そこに適切なデータを取得するのに役立ちました。ただし、集計関数を適用すると:
uiNumCollisionsSummary = summary(uiNumCollisions)
以前使用していた統計 (平均値、中央値など) が得られなくなりました。何故ですか?
さらに、その後、uiNumCollisions と anova に boxplot を適用したいと考えています。ボックスプロットの場合、私が使用するのは次のとおりです。
par( fig=c(0.0,1.0,0.0,1.0))
temp = boxplot( uiNumCollisions)
ボックスプロットで得られる結果は
"Error in oldClass(stats) <- cl : adding class "factor" to an invalid object"
ANOVA では、次のコードを使用していました。
temp = c(ui1NumCollisions, ui2NumCollisions, ui3NumCollisions, ui4NumCollisions)
temp.type = rep(c("1", "2", "3", "4"), c(12,12,12,12))
temp.type = factor(temp.type)
options(contrasts = c("contr.helmert", "contr.poly"))
uiNumCollisionsAOV = aov(temp ~ temp.type)
summary(uiNumCollisionsAOV)
ただし、各列を別のものに変換しない限り、これは明らかに機能しません。各列に因子を再適用するなど、さまざまな修正を試みました(例:ui1NumCollisions = factor(ui1NumCollisions))
。因子レベルを修正しましたが、 のようなものを使用して数値に戻すとas.numeric(levels(ui1NumCollisions)[ui1NumCollisions])
、NAしか得られませんでした。したがって、実際、あなたのソリューションは機能し、私は本当にそれを感謝します, しかし、それは私の問題を完全に解決しません. 周りに簡単なことはありますか? おそらく、私が抱えているすべての因子の問題を解決できる因子なしですべてのデータを取得できる方法で dout テーブルをインポートするだけですか?
/------フォロー - アップ #2-------
私はついに問題が何であるかを見つけました。単なるスペースではなく、データ間にコンマがありました。ファイル data.out は次のようになります。
Subject, uiType, numCollisions, startTimeTraining, startTime, endTime, detlaTraining, deltaTask
0, 0, 43, 0, 510.261, 1743.75, 510.261, 1233.49
1, 1, 17, 0, 1198.65, 2044.62, 1198.65, 845.965
2, 2, 17, 0, 445.788, 1622.83, 445.788, 1177.04
3, 3, 42, 0, 254.793, 1196.93, 254.793, 942.132
4, 1, 16, 0, 1583.5, 2887.39, 1583.5, 1303.9
5, 2, 38, 0, 79.095, 886.533, 79.095, 1287.438
6, 3, 28, 0, 866.75, 1617.48, 866.75, 750.73
7, 1, 23, 0, 565.575, 1361.79, 565.575, 796.216
8, 2, 16, 0, 1211.99, 2538.37, 1211.99, 1326.38
...
そして、それはこのように見えるはずでした。
Subject uiType numCollisions startTimeTraining startTime endTime detlaTraining deltaTask
0 0 43 0 510.261 1743.75 510.261 1233.49
1 1 17 0 1198.65 2044.62 1198.65 845.965
2 2 17 0 445.788 1622.83 445.788 1177.04
3 3 42 0 254.793 1196.93 254.793 942.132
4 1 16 0 1583.5 2887.39 1583.5 1303.9
5 2 38 0 79.095 886.533 79.095 1287.438
6 3 28 0 866.75 1617.48 866.75 750.73
7 1 23 0 565.575 1361.79 565.575 796.216
8 2 16 0 1211.99 2538.37 1211.99 1326.38
...
これらの行を使用してデータテーブルをロードしたとき:
numSamples = 8#or more
dout = read.table("data.out", header = TRUE)
dout = dout[1:numSamples,]
dout
コンマに整数が付加された奇妙なテーブルが表示され、数値へのデータ変換が台無しになり、それらの要素が得られました。
それを修正した後、元のコードは魅力的に機能しました。
DWin の助けと、この問題をここに投稿する機会を与えてくれたことに感謝します。
教訓:就寝前ではなく、起床後にデータを再確認してください。
ありがとう、
パウロ。