【发布时间】:2016-03-07 00:00:00
【问题描述】:
我编写了这个循环来提取出现在时间间隔 (bin) 内的向量的每个元素的名称。我想知道我是否错过了一种更快的方法来执行此操作...我想对长度为 1000 的向量实现随机化方面,因此不想依赖循环。
mydata <- structure(c(1199.91666666667, 1200.5, 1204.63333333333, 1205.5,
1206.3, 1208.73333333333, 1209.06666666667, 1209.93333333333,
1210.98333333333, 1214.56666666667, 1216.06666666667, 1216.63333333333,
1216.91666666667, 1219.13333333333, 1221.35, 1221.51666666667,
1225.35, 1225.53333333333, 1225.96666666667, 1227.61666666667,
1228.91666666667, 1230.31666666667, 1233.53333333333, 1235.8,
1237.51666666667, 1239.41666666667, 1241.6, 1247.08333333333,
1247.45, 1252.7, 1253.26666666667), .Names = c("B", "A", "B",
"E", "A", "A", "B", "G", "G", "C", "A", "D", "E", "B", "B", "E",
"E", "G", "F", "A", "C", "A", "F", "B", "A", "F", "F", "G", "F",
"G", "F"))
mydata
B A B E A A B G G C A D E B B E E
1199.917 1200.500 1204.633 1205.500 1206.300 1208.733 1209.067 1209.933 1210.983 1214.567 1216.067 1216.633 1216.917 1219.133 1221.350 1221.517 1225.350
G F A C A F B A F F G F G F
1225.533 1225.967 1227.617 1228.917 1230.317 1233.533 1235.800 1237.517 1239.417 1241.600 1247.083 1247.450 1252.700 1253.267
这些代表以秒为单位的事件的连续时间。假设我们想让我们的间隔时间长 5 秒。我的方法是制作每个区间开始的向量,然后使用循环查找该区间内出现的元素的名称:
N=5
ints <- seq(mydata[1], mydata[length(mydata)], N)
out<-list()
for(i in 1:length(ints)){
out[[i]] <- names(mydata[mydata>=ints[i] & mydata<ints[i]+N])
}
out
[[1]]
[1] "B" "A" "B"
[[2]]
[1] "E" "A" "A" "B"
[[3]]
[1] "G" "G" "C"
[[4]]
[1] "A" "D" "E" "B"
[[5]]
[1] "B" "E"
[[6]]
[1] "E" "G" "F" "A" "C"
[[7]]
[1] "A" "F"
[[8]]
[1] "B" "A" "F"
[[9]]
[1] "F"
[[10]]
[1] "G" "F"
[[11]]
[1] "G" "F"
这对于小样本来说很好 - 但我可以看到在处理非常大的样本时会变慢,这些样本要排列 1000 次。
【问题讨论】:
-
我在使用
findInterval加速类似问题方面取得了很好的经验。 -
或使用
cut或hmisc::cut2 -
要了解所需的性能:“非常大的样本”有多少以及您必须多久应用一次“时间箱”分组逻辑(“置换 1000 秒的时间”)?
标签: r