我正在寻找一种很好且快速的方法来应用一些对向量进行操作的任意函数,例如sum
,连续到连续 K 个元素的子向量。
这是一个简单的例子,它应该非常清楚地说明我想要什么:
v <- c(1, 2, 3, 4, 5, 6, 7, 8)
v2 <- myapply(v, sum, group_size=3) # v2 should be equal to c(6, 15, 15)
该函数应该尝试处理组group_size
给定向量的元素并对每个组应用一个函数(将其视为另一个向量)。在这个例子中,向量v2
得到如下: (1 + 2 + 3) = 6, (4 + 5 + 6) = 15, (7 + 8) = 15。在这种情况下,K 没有整除 N,所以最后一组是尺寸小于 K。
如果有一个更好/更快的解决方案,仅当 N 是 K 的倍数时才有效,我也将不胜感激。
尝试这个:
library(zoo)
rollapply(v, 3, by = 3, sum, partial = TRUE, align = "left")
## [1] 6 15 15
or
apply(matrix(c(v, rep(NA, 3 - length(v) %% 3)), 3), 2, sum, na.rm = TRUE)
## [1] 6 15 15
另外,在以下情况下sum
最后一个可以缩短为
colSums(matrix(c(v, rep(0, 3 - length(v) %% 3)), 3))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)