在R中,我列出了10个元素,例如:
n <- c(5,5,5,5,5,6,6,6,6,6)
我想创建另一个列表,其中包含2个元素,其中每个元素将是上一个列表中5个元素的平均值。因此,其他列表应如下所示:
5,6
在R中有快速的方法吗?我想要的是一个列表,它给出了第一个X元素的平均值,第二个X元素的平均值等等。在这个例子中,初始列表有10个元素,我想将它们分组为5.所以我想计算一个列表,其中第一个元素是前5个元素的平均值,第二个元素是最后5个元素的平均值。
答案 0 :(得分:3)
投射你的价值向量
x = rnorm(50 * 10)
进入矩阵并采用列意味着
colMeans(matrix(x, 50))
更一般地说,创建一个描述数据分区方式的向量
f = rep(seq_len(10), each=50)
split()
您的数据,lapply()
每个组的功能,并结合(在这种情况下为unlist()
)结果
unlist(lapply(split(x, f), mean))
以两个(例如sapply(split(x, f), mean)
)或一个(例如,tapply()
,by()
,ave()
)步骤执行此操作。
答案 1 :(得分:2)
正如您所提到的,您的原始列表有500个名称。这是一种方法:
x <- runif(500)
list_x <- split(x, ceiling(seq_along(x)/50))
# find the mean in each group of 50
colMeans(as.data.frame(list_x))
10个元素:
y <- c(rep(5, 5), rep(6, 5))
list_y <- split(y, ceiling(seq_along(y)/5))
colMeans(as.data.frame(list_y))