R 向量的连续和

R 向量的连续和,r,vector,cumsum,rollapply,R,Vector,Cumsum,Rollapply,这是继上一个问题之后的一个问题。在这个问题中,建议使用rollapply来计算向量的1st、2nd、3rd项之和;然后是第二、第三、第四次;等等 我的问题是如何计算第一个、第二个和第三个的总和;然后是第四、第五和第六个。也就是说,滚动而不重叠。请问这件事容易做吗 在底部R中使用t set.seed(1) vec <- sample(10, 20, replace = TRUE) #[1] 3 4 6 10 3 9 10 7 7 1 3 2 7 4 8 5 8

这是继上一个问题之后的一个问题。在这个问题中,建议使用
rollapply
来计算向量的
1st、2nd、3rd
项之和;然后是第二、第三、第四次;等等


我的问题是如何计算第一个、第二个和第三个的总和;然后是第四、第五和第六个
。也就是说,滚动而不重叠。请问这件事容易做吗

在底部R中使用
t

set.seed(1)
vec <- sample(10, 20, replace = TRUE)
#[1]  3  4  6 10  3  9 10  7  7  1  3  2  7  4  8  5  8 10  4  8
unname(tapply(vec, (seq_along(vec)-1) %/% 3, sum))

# [1] 13 22 24  6 19 23 12
vec[1:(上限(长度(vec)/3)*3)]
如果长度不能被3整除,则用
NA
填充向量。然后,您只需忽略
colSums
中的
NA
s


还有一个使用
cut
aggregate

x <- ceiling(length(vec)/3)*3
df <- data.frame(vec=vec[1:x], col=cut(1:x, breaks = seq(0,x,3)))
aggregate(vec~col, df, sum, na.rm = TRUE)[[2]]

#[1] 13 22 24  6 19 23 12

x使用
tapply
在底端R中:

set.seed(1)
vec <- sample(10, 20, replace = TRUE)
#[1]  3  4  6 10  3  9 10  7  7  1  3  2  7  4  8  5  8 10  4  8
unname(tapply(vec, (seq_along(vec)-1) %/% 3, sum))

# [1] 13 22 24  6 19 23 12
vec[1:(上限(长度(vec)/3)*3)]
如果长度不能被3整除,则用
NA
填充向量。然后,您只需忽略
colSums
中的
NA
s


还有一个使用
cut
aggregate

x <- ceiling(length(vec)/3)*3
df <- data.frame(vec=vec[1:x], col=cut(1:x, breaks = seq(0,x,3)))
aggregate(vec~col, df, sum, na.rm = TRUE)[[2]]

#[1] 13 22 24  6 19 23 12

x同样的想法。您只需要指定by参数。默认值为1

x <-c(1, 5, 4, 5, 7, 8, 9, 2, 1)

zoo::rollapply(x, 3, by = 3, sum)
#[1] 10 20 12

#or another Base R option
sapply(split(x, ceiling(seq_along(x)/3)), sum)
# 1  2  3 
#10 20 12 

x同样的想法。您只需要指定by参数。默认值为1

x <-c(1, 5, 4, 5, 7, 8, 9, 2, 1)

zoo::rollapply(x, 3, by = 3, sum)
#[1] 10 20 12

#or another Base R option
sapply(split(x, ceiling(seq_along(x)/3)), sum)
# 1  2  3 
#10 20 12 

x您可以定义窗口大小,并执行以下操作:

x <-c(1, 5, 4, 5, 7, 8, 9, 2, 1)
n <- 3
diff(c(0, cumsum(x)[slice.index(x, 1)%%n == 0]))

x您可以定义窗口大小,并执行以下操作:

x <-c(1, 5, 4, 5, 7, 8, 9, 2, 1)
n <- 3
diff(c(0, cumsum(x)[slice.index(x, 1)%%n == 0]))

x我们可以使用
RcppRoll
中的
roll\u sum
,这将非常有效

library(RcppRoll)
roll_sum(x, n=3)[c(TRUE, FALSE, FALSE)]
#[1] 10 20 12
数据
x我们可以使用
RcppRoll
中的
roll\u sum
,这将非常有效

library(RcppRoll)
roll_sum(x, n=3)[c(TRUE, FALSE, FALSE)]
#[1] 10 20 12
数据
x