我是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))
感谢您的任何建议。
答案 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)
我们也可以将lapply
与Reduce
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