【发布时间】:2015-09-28 08:31:26
【问题描述】:
我有两个数据框,一个包含 57 名受试者的实验数据,分 2 个区块,每个区块 250 次试验(总共 28500 行),另一个包含所有执行漂移校正的试验的主题、行、区块和试验数(总共 160 行)。以下是两个文件中相关列的样子:
实验数据:
> head(dori.np[c("userid","blocknum","trialnum")])
userid blocknum trialnum
26 1 1 1
27 1 1 2
28 1 1 3
29 1 1 4
30 1 1 5
31 1 1 6
漂移修正数据:
> head(driftCor.user)
userid driftTrials blocknum trialnum
1 4 61 1 61
2 4 140 1 140
3 5 1 1 1
4 6 208 1 208
5 8 71 1 71
6 8 197 1 197
我想做的是为每个参与者的每次试验计算未来最近的漂移校正距离(在试验中)多远。现在我正在使用嵌套循环来执行此操作,但它需要很长时间才能运行。
numTilDrifCor<-numeric(0)
for (i in driftCor.user$userid) {
temp1 <- subset(driftCor.user,driftCor.user$userid==i)
for (j in temp1$blocknum) {
temp2<-subset(dori.np,dori.np$userid==i & dori.np$blocknum==j)
driftTrials<-subset(temp1,temp1$blocknum==j)
n <- 1
for (k in 1:250) {
if (n <= length(driftTrials$trialnum)) {
diff <- driftTrials$trialnum[n] - k
if (diff > 0) {
numTilDrifCor <- c(numTilDrifCor,diff)
} else if (diff == 0) {
numTilDrifCor <- c(numTilDrifCor,0)
n <- n + 1
}
} else {
numTilDrifCor <- c(numTilDrifCor,NA)
}
}
}
}
有更快的方法吗?
【问题讨论】:
-
抱歉,我很难理解您要计算的内容。给定用户 id
i和driftCor.user中特定行的块号j,您如何计算所需的结果? -
例如:对于每个用户 ID,每个块中有 250 个试验,编号为 1、2、3 ... 250。此外,对于每个块中的每个用户 ID,都有一些试验发生了漂移校正.例如,假设试验 61 和 140 是用户 ID 1 的漂移校正轨迹。我想创建一个值向量,该向量等于下一次漂移校正之前的试验次数,如下所示:60、59、58 ... 0 , 78, 77, 76 .... 0,然后是其余的 NA,直到该块结束,因为没有更多的未来漂移校正。这有意义吗?
标签: r