2

大規模なデータセットで変数をループして 3D マトリックスを構築しようとしています (以下のデータの「頭」を参照してください)。具体的には、「LastFixes」の最大数と同じ数の行、件名と同じ数の列 (Sub = 36)、条件と同じ数のページ (つまり 8) を持つマトリックスを作成する必要があります。 FixStart の開始から FixEnd の終了まで連続して 1 を割り当て、FixEnd の終了から FixStart の開始まで 0 を割り当てます。たとえば、データの最初の行については、行列の最初の 165 行に 1 が必要で、次に行番号 166 から 330 まで 0 が必要です。マトリックスに1!以下に、「ヘッド」と R コードを示します。誰かがこの問題を解決するのを手伝ってくれたら幸いです。

enter code here

head (data)

  Sub Item Condition FixStart FixEnd
1   1    4         7        1    165
2   1    4         7      331    600
3   1    4         7      623   1180
4   1    4         7     1202   1487
5   1    4         7     1511   1561
6   1    4         7     1696   2466


lastFix <- max(data$FixEnd)


datamatrix<-array(0,dim=c(lastFix,36,8))

for (i in 1:length(data$Sub)){ 
  n <- data[i,1]
  if (data[i,3] == "1"){
    for (j in data[i,4]:data[i,5]){
      datamatrix[j,n,1] <- datamatrix[j,n,1]+1
    }
  }else 
  if (data[i,3] == "2"){
    for (j in data[i,4]:data[i,5]){
      datamatrix[j,n,2] <- datamatrix[j,n,2]+1
    }
  }else 
  if (data[i,3] == "3"){
    for (j in data[i,4]:data[i,5]){
      datamatrix[j,n,3] <- datamatrix[j,n,3]+1
    }
  }else
  if (data[i,3] == "4"){
    for (j in data[i,4]:data[i,5]){
      datamatrix[j,n,4] <- datamatrix[j,n,4]+1
    }
  }else
  if (data[i,3] == "5"){
    for (j in data[i,4]:data[i,5]){
      datamatrix[j,n,5] <- datamatrix[j,n,5]+1
    }
  }else
  if (data[i,3] == "6"){
    for (j in data[i,4]:data[i,5]){
      datamatrix[j,n,6] <- datamatrix[j,n,6]+1
    }
  }else
  if (data[i,3] == "7"){
    for (j in data[i,4]:data[i,5]){
      datamatrix[j,n,7] <- datamatrix[j,n,7]+1
    }
  }else
  if (data[i,3] == "8"){
    for(j in data[i,4]:data[i,5]){
      datamatrix[j,n,8] <- datamatrix[j,n,8]+1
    }
  }
}
4

1 に答える 1

1

私はこれがあなたが探しているものだと信じています。各 Subject X Condtion に対処するために、二重ループを作成しました。

lastFix <- max(data$FixEnd)

datamatrix <- array(0,dim=c(lastFix,36,8))

for(j in seq(dim(datamatrix)[2])){ #loop for Sub
    for(k in seq(dim(datamatrix)[3])){ #loop for Condition
        #j=1; k=7
        data.sub <- subset(data, Sub==j & Condition==k)
        if(nrow(data.sub) != 0){
            for(i in seq(nrow(data.sub))){
                ones <- data.sub$FixStart[i]:data.sub$FixEnd[i]
                datamatrix[ones,j,k] <- 1
            }
        }
        print(paste("Sub", j, ";", "Condition", k, "is finished"))
    }
}

#image shows that 1's have been added to Subject 1 (column) 
image(x=seq(dim(datamatrix)[1]), y=seq(dim(datamatrix)[2]), datamatrix[,,7])

あなたの小さなデータセットは、7番目のレイヤー(Condition == 7)とそのマトリックスの1番目の列(Sub == 1)に変更をもたらします。ここに画像があります:

ここに画像の説明を入力

于 2013-05-21T09:12:05.373 に答える