计算每行的序列中的列的平均值

时间:2016-05-06 22:39:18

标签: r apply mean with-statement

我是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))

感谢您的任何建议。

2 个答案:

答案 0 :(得分:1)

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

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循环不是最好的解决方案,但却是我脑海中的第一个。

答案 1 :(得分:1)

我们也可以将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