通过某种方式缩短向量

时间:2015-07-23 10:47:54

标签: r vector

我有一个简单的问题,但我找不到合适的解决方案=>我有一个列表(我们称之为“列表”),由大约2000个普通向量(列表[[1]],列表[[2]]等组成)。每个向量包含50399个数字。现在我想要的是缩短每个向量,使其最终成为840个数字。

所以我希望第一个数字是原始矢量的前60个数字的平均值(mean [list [[i]] [1:60])),第二个数字应该是下一个数字的平均数。这应该工作839次(共计50399个数字)。所以最后一个数字应该是原始向量的最后59个(不是60个)数字的平均值。

这应该适用于“list”中的每个veactor(list [[i]])!

你们是否知道它是如何运作的?

1 个答案:

答案 0 :(得分:4)

你可以这样解决:

set.seed(1)
(list <- replicate(3, sample(1:10, 10, T), simplify = FALSE))
# [[1]]
# [1]  3  4  6 10  3  9 10  7  7  1
# 
# [[2]]
# [1]  3  2  7  4  8  5  8 10  4  8
# 
# [[3]]
# [1] 10  3  7  2  3  4  1  4  9  4

n <- 5 # crunch vectors of 10 into 5 means
lapply(list, function(x) sapply(split(x, ceiling(seq_along(x)/(length(x)/n))), mean))
# [[1]]
# 1   2   3   4   5 
# 3.5 8.0 6.0 8.5 4.0 
# 
# [[2]]
# 1   2   3   4   5 
# 2.5 5.5 6.5 9.0 6.0 
# 
# [[3]]
# 1   2   3   4   5 
# 6.5 4.5 3.5 2.5 6.5

即,在您的情况下:

list <- replicate(2000, sample(1:10, 50399, T), simplify = FALSE)
res <- lapply(list, function(x) sapply(split(x, ceiling(seq_along(x)/(length(x)/840))), mean))
sapply(res, length) # check