我正在尝试通过在大型数据集中循环变量来构建3D矩阵(请参阅下面数据的“头部”)。具体来说,我需要创建一个矩阵,其行数与“LastFixes”的最大数量一样多,列数与主题(Sub = 36)以及有条件的页数(即8)一样多,我想要从FixStart的开始到FixEnd的结束连续分配1,从FixEnd的结尾到FixStart的开始为止等等,依此类推。因此,例如,对于数据的第一行,我需要在矩阵的前165行中有1,然后在#166行中有0到330.我的R代码可以工作,但奇怪的是,我得到的数字不是0和矩阵中的1s!您可以在下面看到'head'以及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
}
}
}
答案 0 :(得分: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层(条件== 7)和该矩阵的第1列(Sub == 1)发生更改。这是一张图片: