2016-10-28 2 views
0

数日前にRから始めて、実際に助けを得ることができました:D 私は現在、200の観測値と12の変数を持つdata.frameを持っていますそれらの名前はc1〜c12です)。トラブルデータフレームをrのデザインマトリックスに変換する

背景: ユーザーがフィールド上で(最大12回)クリックします。これらのフィールドは、6行4列に並べられており、ユーザのクリックが数.:

[,1] [,2] [,3] [,4] 
[1,] "11" "21" "31" "41" 
[2,] "12" "22" "32" "42" 
[3,] "13" "23" "33" "43" 
[4,] "14" "24" "34" "44" 
[5,] "15" "25" "35" "45" 
[6,] "16" "26" "36" "46" 

各値の最初の桁は行を表し、第二の列として記録されます。それはなぜ11-16,21-26 ... 41-46という名前です。 値の範囲はc(11:16、21:26、31:36、41:46)なので、可能な値は24です。

私はRにデータを読み取ることができましたし、最初の10回の観測は、次のようになります。

マイデータ:

c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 
1 33 43 63 23 34 32 31 41 61 21 NA NA 
2 24 23 22 21 31 61 41 NA NA NA NA NA 
3 61 62 63 64 31 32 33 34 41 42 43 44 
4 31 32 33 34 21 22 23 24 41 NA NA NA 
5 11 12 13 14 22 23 32 33 62 63 42 52 
6 51 52 53 54 61 62 63 64 31 32 33 34 
7 31 21 61 62 63 64 33 23 NA NA NA NA 
8 41 42 43 44 32 33 62 63 52 53 61 64 
9 61 62 63 64 21 22 24 23 34 31 41 44 
10 51 52 53 54 24 34 21 31 33 23 61 63 

私は計画行列のいくつかの並べ替えに私のデータを変換したいですバックグラウンドで与えられたポジションテーブルに基づいていますが、 希望する出力私は観察ごとに1つのマトリックスが必要です。フィールドをクリックしたときに6行4列と1を含んでいますobの一部です他のすべての位置については0である。 最初の観察は次のようになります。

0 1 1 1 0 1 
0 0 1 0 0 0 
0 1 1 1 0 1 
0 0 1 0 0 0 

あなたは私に私がに見て、多分このようなガイドラインか何かのようにヒントを持つべきである等のパッケージ化のヒントを与えてもらえますか?

私の考えは、ポジションのマトリックスを作成し、それに観測値を掛けることでしたが、現在は本当に苦労しています。

Rでの私の立場行列は次のようになります(バックグラウンドで提供)

#construct design matrix 
alt1 <- c(paste0(1, 1:6)) 
alt2 <- c(paste0(2, 1:6)) 
alt3 <- c(paste0(3, 1:6)) 
alt4 <- c(paste0(4, 1:6)) 
positions <- matrix(c(alt1, alt2, alt3, alt4), nrow = 6) 

私の値は(ROWNUMBERが含まれているとして、**、道より簡単かつ巧妙な解決策があるかもしれません最初の数字)とcolumnnr(二桁)が、私は位置によって行列にそれらを書く方法を知らない**

dput(head(data)) 
structure(list(c1 = c("33", "24", "61", "31", "11", "51"), c2 = c("43", 
"23", "62", "32", "12", "52"), c3 = c("63", "22", "63", "33", 
"13", "53"), c4 = c("23", "21", "64", "34", "14", "54"), c5 = c("34", 
"31", "31", "21", "22", "61"), c6 = c("32", "61", "32", "22", 
"23", "62"), c7 = c("31", "41", "33", "23", "32", "63"), c8 = c("41", 
"", "34", "24", "33", "64"), c9 = c("61", NA, "41", "41", "62", 
"31"), c10 = c("21", NA, "42", "", "63", "32"), c11 = c("", NA, 
"43", NA, "42", "33"), c12 = c(NA, NA, "44", NA, "52", "34")), .Names = c("c1", 
"c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10", "c11", 
"c12"), row.names = c(NA, 6L), class = "data.frame") 

乾杯と感謝、 Sidebob

+0

あなたの入力と予想される出力について具体的に説明できますか? –

+0

確か:ユーザーがフィールドをクリックすると(最大12回)フィールドに表示されます。これらのフィールドは6行4列です。それはなぜ11-16,21-26 ... 41-46という名前です。 私の入力は現在、200人の観察者(ユーザー)と12人のクリックが数字として記録されています。 出力として、私は6行4列と、フィールドをクリックしたときに1、そうでないときに0を含む、ユーザーごとに1つのマトリックスが必要です。 – sidebob

+0

データを簡単にコピーアンドペーストするようにしてください。 –

答えて

0

単純なループで、個々の行を取り出して行列 に変換できます。

for(row in 1:nrow(data)) { 
    x <- as.numeric(data[row,]) 
    i <- x %% 10 
    j <- x %/% 10 
    mat <- matrix(0, 6, 6) 
    mat[cbind(i,j)] <- 1 
    print(mat) 
    } 

これは、私はあなたが期待する出力の種類を確認していない

 [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 0 1 1 1 0 1 
[2,] 0 0 1 0 0 0 
[3,] 0 1 1 1 0 1 
[4,] 0 0 1 0 0 0 
[5,] 0 0 0 0 0 0 
[6,] 0 0 0 0 0 0 
    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 0 1 1 1 0 1 
[2,] 0 1 0 0 0 0 
[3,] 0 1 0 0 0 0 
[4,] 0 1 0 0 0 0 
[5,] 0 0 0 0 0 0 
[6,] 0 0 0 0 0 0 
    ... 

を与えます。 を印刷してsink()のファイルに出力することもできます。write()を に、またはwrite.table()をcsvのような形式で出力できます。

ところで、ループが遅く、実際には がRで回避されるべきだと主張することがありますが、この場合は正常に動作し、 はわかりやすいものです。

+0

あなたの答えはOtt !, ですので、最初にマトリックスマットを作成しましたか? コードスニペットが現在実行されていません。 すべての小さな行列を1と0のようにテキストファイルに入れる必要があります。私は推定のための入力としてそれらを必要とします – sidebob

+0

ありがとうございます!驚くばかり。あなたは私の一日を作った – sidebob