为每一行计算序列中列的均值
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 循环不是最好的解决方案,但它是我想到的第一个。
我们也可以使用 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
我是 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 循环不是最好的解决方案,但它是我想到的第一个。
我们也可以使用 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