【问题标题】:Get the average column values for a set of rows using R使用 R 获取一组行的平均列值
【发布时间】:2019-10-31 22:25:02
【问题描述】:

我正在尝试获取特定行范围内的列的平均值。例如,假设:

data.frame(x=c(.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9))

我想要一个新数据框中第 1-3、4-6 和 7-9 行的平均值,如下所示:

data.frame(x=c(0.2, 0.5, 0.8)

但是,我有超过 15,000 行,我想为每列一次取 20 行的平均值。有没有这样做的好方法?我认为使用 colMeans() 的子集做某事是最好的,但我在 R 方面非常新手。

谢谢!

【问题讨论】:

  • aggregate(. ~ grp, transform(d, grp = ceiling(seq_along(x)/3)), mean) 其中d 是您的data.frame

标签: r


【解决方案1】:

这是一种使用.colMeans() 的方法,它可以提供您想要的输出。

dat <- data.frame(x=c(.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9))
> .colMeans(x = dat$x, m = 3, n = nrow(dat)/3, na.rm = T )
[1] 0.2 0.5 0.8

在更大的data.frame 上进行测试:

> dat <- data.frame(x = rnorm(15000))
> 
> # Start timer
> tic()
> w <- .colMeans(x = dat$x, m = 3, n = nrow(dat)/3, na.rm = T )
> 
> # End timer
> toc()
0.01 sec elapsed
> 
> print(length(w))
[1] 5000

这比d.b提出的方法快一点:

> tic()
> w2 <- aggregate(. ~ grp, transform(dat, grp = ceiling(seq_along(x)/3)), mean)
> toc()
0.1 sec elapsed

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2021-06-23
    相关资源
    最近更新 更多