楼主: SBElwood
3181 5

[问答] r语言怎么实现矩阵中每5列相加成新的列,最后合成一个新的矩阵 [推广有奖]

  • 0关注
  • 0粉丝

本科生

76%

还不是VIP/贵宾

-

威望
0
论坛币
9 个
通用积分
16.7322
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
726 点
帖子
16
精华
0
在线时间
176 小时
注册时间
2020-3-24
最后登录
2025-5-26

楼主
SBElwood 学生认证  发表于 2021-3-29 20:34:12 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
如图,我需要让矩阵中的第1-第5列相加成、第6-第10列相加......最后并成一个新的矩阵,因为列数很多,我不想一次次的加,所以我之前考虑用for循环:
f <- for( i in seq(1,100,by=5)) {cbind(rowSums(wiot[1:2464 , i : i+5 ]))}
但是报错Error in rowSums(wiot[1:2464, i:i + 5]) :    'x'必需是阵列,而且至少得有两个维度
刚学习r,向大家来讨教,帮帮新人吧
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:R语言 for循环 For

企业微信截图_16170209808073.png (48.59 KB)

企业微信截图_16170209808073.png

沙发
SBElwood 学生认证  发表于 2021-3-29 21:01:52
我发现这个代码可以
f1 <- sapply(seq(1,100, by=5), function(i) {
  indx <- i:(i+4)
  rowSums(wiot[indx[indx <= 100]])})
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

藤椅
llb_321 在职认证  发表于 2021-3-30 00:29:34
做了个示例,你参考。
  1. m <- matrix(runif(1070), 10) #示例原矩阵

  2. #以下代码中的m改成你的矩阵名wiot即可
  3. f <- matrix(0, dim(m)[1], dim(m)[2] %/% 5 + 1) #空矩阵
  4. #以下循环处理5倍数列
  5. for (i in seq(1, (dim(m)[2] - dim(m)[2] %% 5), by = 5)) {
  6.   f[, (i - 1) / 5 + 1] <- rowSums(m[, i:(i + 4)])
  7. }
  8. #以下处理最后不足5列,加总形成最后一列
  9. if (dim(m)[2] %% 5 == 1) {
  10.   f[, dim(m)[2] %/% 5 + 1] <-
  11.     m[, dim(m)[2]]
  12. } else {
  13.   f[, dim(m)[2] %/% 5 + 1] <-
  14.     rowSums(m[, (dim(m)[2] %/% 5 * 5 + 1):dim(m)[2]])
  15. }
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
cheetahfly + 10 热心帮助其他会员
SBElwood + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 10  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
owenqi 在职认证  学生认证  发表于 2021-3-30 02:03:25
我是你的话,可能会转置一下行列,然后用向量化的方式去求和。
  1. ncolsum <- 5
  2. df <- matrix(1:200,ncol = 20)
  3. dft <- as.data.frame(t(df))

  4. dlist <- split(dft, 0: (nrow(dft) - 1) %/% ncolsum)

  5. dl <- lapply(dlist, colSums)
  6. dl <- dplyr::bind_rows(dl)
  7. dl <- as.data.frame(t(dl))
复制代码
已有 3 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
cheetahfly + 10 热心帮助其他会员
SBElwood + 1 + 1 + 1 观点有启发
llb_321 + 5 精彩帖子

总评分: 论坛币 + 15  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

报纸
七年浅学经济 发表于 2021-9-13 22:08:51
是用来合并wiot中各国最终消费里的小项吗?

地板
cheetahfly 在职认证  发表于 2021-9-16 22:39:23
我也贡献思路:
  1. # 假设原数据是矩阵mt
  2. # 假设矩阵的列数是5的整数倍
  3. dim(mt) <- c(nrow(mt), 5, ncol(mt) / 5)
  4. apply(mt, 3, rowSums)

  5. # 如果矩阵的列数不是5的整数倍
  6. # 将mt矩阵分成下面两个矩阵,解法略
  7. mt[, 1:(ncol(mt) %/% 5 * 5)]
  8. mt[, (ncol(mt) %/% 5 * 5 + 1):ncol(mt)]
复制代码

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-29 08:02