我有一个简单的问题,但我找不到合适的解决方案=>我有一个列表(我们称之为“列表”),由大约2000个普通向量(列表[[1]],列表[[2]]等组成)。每个向量包含50399个数字。现在我想要的是缩短每个向量,使其最终成为840个数字。
所以我希望第一个数字是原始矢量的前60个数字的平均值(mean [list [[i]] [1:60])),第二个数字应该是下一个数字的平均数。这应该工作839次(共计50399个数字)。所以最后一个数字应该是原始向量的最后59个(不是60个)数字的平均值。
这应该适用于“list”中的每个veactor(list [[i]])!
你们是否知道它是如何运作的?
答案 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