为每一行计算序列中列的均值

Calculate means of columns in a sequence for each row

我是 R 的新手。我需要为每个人计算固定间隔的变量均值。我有这个简单的数据框。

df = data.frame(id=c("A","B","C","D"),
            x1=c(3,5,7,2), x2= c(5,3,7,3), x3=c(5,6,4,4), x4=c(5,3,7,3),
            x5=c(5,3,7,3), x6=c(5,4,7,1), x7= c(5,7,7,3), x8= c(5,3,8,3),
            x9= c(4,3,2,3))

我要计算的是每第 4 列的平均值(例如:x1、x4、x7 的平均值,每个个体的变量以及每个个体的 x2、x5、x8 等)作为新数据框。我的输出应该如下所示。

      y1       y2       y3
A 4.333333 5.000000 4.666667
B 5.000000 3.000000 4.333333
C 7.000000 7.333333 4.333333
D 2.666667 3.000000 2.666667

在实际数据框中,我有 120 个变量和 40 个个体。

我搜索了以前的帖子,尝试按照下面的方式进行。不过肯定是我申请的方式不对。

        df2<-with(df,(seq([,2], [,10], by=3)),FUN= function(x) mean(x, na.rm=TRUE))

感谢您的任何建议。

对于示例中显示的数据框,您可以使用以下代码

new.df <- data.frame(id = c("A", "B", "C", "D"))
for (i in 2:4) {
  id <- seq(i, ncol(df), 3)
  new.df[, i] <- rowMeans(df[,id])
}

只需将其扩展到您的实际数据框即可。也许 for 循环不是最好的解决方案,但它是我想到的第一个。

我们也可以使用 lapplyReduce

n <- 3
Reduce(`+`,lapply(seq(2, ncol(df), by =n), 
          function(i) df[i:( min(c(ncol(df), i+n-1)))]))/n
#       x1       x2       x3
#1 4.333333 5.000000 4.666667
#2 5.000000 3.000000 4.333333
#3 7.000000 7.333333 4.333333
#4 2.666667 3.000000 2.666667