【发布时间】:2016-09-18 02:03:18
【问题描述】:
当人们扫描徽章时,我有一个向量。我还有另一组时间是“测量点”。
scans = structure(c(1388570120, 1388572119, 1388575229, 1388577402, 1388580457, 1388583364, 1388586817, 1388589929, 1388593054, 1388599025), class = c("POSIXct", "POSIXt"), tzone = "UTC")
points = as.POSIXct(9*3600,"UTC",origin="2014-01-01")+seq(0,10*3600,3600)
我想要做的是计算有多少scans 大于(或等于)points
sum(scans >= points[1])
#> [1] 10
这一次可以工作一个,并且可以很容易地转换为 for 循环或 lapply
lapply(points,function(x){sum(scans >= x)})
但是,我不能简单地使用 scans >= points 并返回一个列表,其中所有扫描都与逐个元素的点进行比较。
R 中有没有一种方法可以在不使用循环结构的情况下将一个完整的向量与另一个向量的每个元素进行比较(因此结果与上面的 lapply 示例相同,但可能在结构上除外)? 我实际上有一个扫描向量列表,我已经通过lapplying,我希望有一种方法可以避免 R 中的嵌套循环。
【问题讨论】:
-
看看能不能用
?findInterval;至少在这个例子中,见length(scans) - findInterval(points, scans) -
@alexis_laz 有趣的功能,我得玩一下。
标签: r vector vectorization