gpt4 book ai didi

r - 如何按照一定规则对矩阵中的列求和?

转载 作者:行者123 更新时间:2023-12-02 08:06:56 25 4
gpt4 key购买 nike

现在我有很多行数不同的矩阵。我想分别对奇数行和偶数行元素求和,如下所示:

o <- matrix(rep(c(1,2,3,4,5,6),6),ncol = 6)
o2 <- matrix(rep(c(1,2,3,4,5,6),12),ncol = 6)
#I want to sum the odd-number rows and even number rows element respectively
i=1
kg <- NULL
while(i <= 2){
op<-unlist(Map(sum,o[i,],o[i+2,],o[i+4,]))
kg <- c(kg,op)
i=i+1
}

i=1
kg2 <- NULL
while(i <= 2){
op2<-unlist(Map(sum,o2[i,],o2[i+2,],o2[i+4,],o2[i+6],o2[i+8],o2[i+10]))
kg2 <- c(kg2,op2)
i=i+1
}
kg
kg2 #the result should be a vector sequence like kg and kg2
> kg2
[1] 18 18 18 18 18 18 24 24 24 24 24 24

这是我能做的事。但是我的数据有很多不同长度的列。这是我可以快速完成的任何方法吗?

我怎样才能生成像 "o2[i,],o2[i+2,],o2[i+4,],o2[i+6],o2[i+8],o2[ i+10])"自动根据输入的数字?感谢您的帮助:)

最佳答案

也许是这样的?

o <- matrix(rep(c(1,2,3,4,5,6),6),ncol = 6)
o2 <- matrix(rep(c(1,2,3,4,5,6),12),ncol = 6)

even <- function(x) 2 * seq(1, nrow(x) / 2);
odd <- function(x) 2 * seq(1, nrow(x) / 2) - 1;

colSums(o[even(o), ]);
#[1] 12 12 12 12 12 12

colSums(o[odd(o), ]);
#[1] 9 9 9 9 9 9

colSums(o2[even(o2), ]);
#[1] 24 24 24 24 24 24

colSums(o2[odd(o2), ]);
#[1] 18 18 18 18 18 18

说明:even/odd 返回matrix/data.frame 的偶数/奇数行索引;然后我们可以使用 colSums 按列对条目求和。


更新

要对第 3、6、9、12 行(或任何其他序列)中的条目求和,您只需定义一个相应的函数,例如

another_seq <- function(x) 3 * seq(1, nrow(x) / 3)
colSums(o2[another_seq(o2), ]);
#[1] 18 18 18 18 18 18

关于r - 如何按照一定规则对矩阵中的列求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50598955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com