我想通过写一条消息来计算按下键盘不同键所需的时间间隔。
为了获取数据,我使用了一个在编写文本后生成.csv的程序。这个.csv有三列:第一列按下并释放按键,第二列表示按键被按下(0)或释放(1),最后一列记录每个事件的时间。
然后想法是计算每个键所需的时间间隔,因为它被按下直到它被释放。
在下面这个非常简单的示例中,我们可以看到时间16777248
已按下5.0067901611328125e-06
键并在0.21875882148742676
时间释放,因此,此键的时间间隔为{ {1}}。密钥0.21875882148742676-5.0067901611328125e-06
的时间间隔应为72
。
0.1861410140991211-0.08675289154052734
目前我在R中编写了一个代码,首先,在.csv中读取表格。然后它搜索第二列中的第一个1并获取相应的键名。接下来,它使用0搜索上一个键。它计算时间间隔,将此值保存在向量中,然后从矩阵中删除这两行。接下来,它应重复此操作,直到不再有行为止。
16777248 0 5.0067901611328125e-06
72 0 0.08675289154052734
72 1 0.1861410140991211
16777248 1 0.21875882148742676
问题是有时值myTable [x,y]是NA,因为相应的行已被删除。在每次迭代中,删除两行(具有按下的键和相应的释放键的行)。
此时我收到以下错误:
data.csv <- read.table("example.csv",header=F, sep=",", dec=".")
myTable<- data.csv
keySearched=0
timeInterval=c( rep( 0,length(myTable[,1]) ) )
L=(length(myTable[,1]))
for( i in 1:L ){
if( myTable[i,2]==1 ){
keySearched <- myTable[i,1]
for( j in 1:(i-1) ){
if( myTable[j,1]==keySearched ){
timeInterval[j] <- (myTable[i,3]-myTable[j,3])
myTable <- myTable[ -c(j,i), ]
}
}
}
}
我怎么能解决这个问题?
答案 0 :(得分:0)
您可以尝试这样做:
key = c(3,6,3,8,8,3,6,3)
pressed = c(0,0,1,0,1,0,1,1)
time = c(12,14,16,17,19,22,34,35)
a = data.frame(key,time,pressed)
>a
key time pressed
1 3 12 0
2 6 14 0
3 3 16 1
4 8 17 0
5 8 19 1
6 3 22 0
7 6 34 1
8 3 35 1
首先按键号和时间顺序排列数据框(或矩阵,如果您愿意)。这应该将按下和释放的键组合在一起。然后使用diff计算相同键之间的时差。最后,设置NA那些没有意义的差异。
a = a[order(a$key,a$time),]
a$lapse = c(0,diff(a$time))
a$lapse[seq(1,nrow(a),2)] = NA
>a
key time pressed lapse
1 3 12 0 NA
3 3 16 1 4
6 3 22 0 NA
8 3 35 1 13
2 6 14 0 NA
7 6 34 1 20
4 8 17 0 NA
5 8 19 1 2