• ベストアンサー

統計解析ソフトRの操作方法について

n1<-c(1,8,10) n2<-c(20,31,45) n3<-c(5,16,27)   ・   ・ nx<-c(4,49,37) 上記のようにランダムな数字が1回につき3つずつ出現する場合に、それぞれの出現数字について、次回出現数字を数字毎に出現回数をカウントしたいのです。 たとえば、n1の数字1は次回n2に数字20,31,45がでていますので、数字1は数字20,31,45をそれぞれ1回ずつカウントします。n1の数字8,6も次回n2の数字が20,31,45ですで、1と同様にカウントとします。n2は次回n3の数字が5,16,27ですので、n2の20,31,45についてそれぞれ次回n3の数字5,16,27をそれぞれ1回ずつカウントします。このようにして、次回にでる数字を種類別に回数をカウントしていき、nxになった場合に、例えば数字1の次にきた数字の種類とそれぞれの回数が何回か、同様に数字2についても次にきた数字の種類とそれぞれの回数を、カウントしていきたいのです。Rでできるでしょうか?よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • backs
  • ベストアンサー率50% (410/818)
回答No.2

何度も読み返してみたのですが、、、No.1さんのように質問者さんのやろうとしていることが私には分かりませんでした。 > n1の数字1は次回n2に数字20,31,45がでていますので、数字1は数字20,31,45をそれぞれ1回ずつカウントします。 ??? こういうことではないのですか? # nは何回繰り返すか指定 myprog <- function(n){ r.dat <- 0:9 # 繰り返す分の行数を持つ空のデータ行列を作成 mat.dat <- matrix(nrow=n, ncol=3) for(i in 1:n){ # r.datから無作為に3つの数字を復元抽出 n.dat <- sample(r.dat, 3, replace=TRUE) # i番目の繰り返し、i行へデータを代入していく mat.dat[i, ] <- n.dat } # 結局、n*3行のデータ行列が出来上がる dimnames(mat.dat)<-list(c(paste("n",1:n,sep="")),c(paste("",1:3,sep=""))) res1 <- mat.dat res2 <- table(mat.dat) out <- list("データ行列"=res1, "集計"=res2) plot(res2, xlab="出現数字", ylab="計数") out }

m-karina
質問者

補足

多忙のため、連絡が遅くなりすいません。私は質問者です。R初心者でお書きいただいたことが、あまり理解できないのですが、このプログラムの場合、対象となる数字群をどのようにしていしたらよいのでしょうか?r.dat n.dat mat.datとはなのを表すのでしょうか?どうかよろしくお願いいたします。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kirinoma
  • ベストアンサー率53% (288/542)
回答No.1

Rは知りませんが,何の工夫も無しにやると以下のような感じでしょうか. 1.検査するデータをx行3列配列(命名:data)に格納する 2.カウント結果格納用に,データに出現する数の全種類数をpとし, p行p列のゼロ配列(命名:result)を生成する (1~100の数値が現れるなら100x100の大きさ) 3.3つのカウント用変数を用意する(命名:line_cnt,row_cnt1,row_cnt2) 4.以下の繰り返し処理を行う(質問文で例示して頂いた内容そのままです) 繰り返し1 line_cnt 1から99まで  繰り返し2 row_cnt1 1から3まで   繰り返し3 row_cnt2 1から3まで    result[data[line_cnt][row_cnt1]][data[line_cnt+1][row_cnt2]]の値を1増やす 5.組み合わせ全パターン分の表が出来たので,結果を表示する Rでの行・列のアクセス規則が分からないので,適宜変えてください.

すると、全ての回答が全文表示されます。

関連するQ&A