【问题标题】:how to average groups of elements in a list in R? [closed]如何平均R中列表中的元素组? [关闭]
【发布时间】:2016-03-17 01:14:38
【问题描述】:

在 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 个元素的平均值。

【问题讨论】:

  • 所以应该是 10 个元素还是 2 个?
  • ave(x, (seq_along(x)-1) %/% 5) 也许?

标签: r list average


【解决方案1】:

转换你的值向量

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())执行此操作。

【讨论】:

  • 它给了我一个错误的答案:s
  • @wthimdh - 那么也许你应该澄清这个问题。目前尚不清楚您要完成什么(根据至少有四个投票结束此问题的人)。
  • @wthimdh 以您为例,这将是 colMeans(matrix(x, ncol = length(x) / 5)),因为您想要 5 个块
  • @rawr 谢谢,终于有名单了^^
【解决方案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))

【讨论】:

  • 好吧,实际上我有 500 个元素,我想计算每个 50 个元素的平均值。
  • 我已经编辑了我的答案。
  • 对于这样的列表:[1] 5 5 5 5 5 6 6 6 6 6,它给了我 [1] 5.5 5.5 5.5 5.5 5.5,但我想要的是 [1] 5 6 第一项是前5个元素的平均值,第二个是后5个元素的平均值
  • 但你刚刚说你的列表中有 500 个元素——不清楚你在追求什么。
  • 我再次编辑了我的答案:我认为colMeans 是我们需要的。
猜你喜欢
  • 2013-07-22
  • 1970-01-01
  • 2017-06-11
  • 2016-08-23
  • 2016-07-24
  • 2012-11-01
  • 1970-01-01
  • 2020-07-12
  • 1970-01-01
相关资源
最近更新 更多