作者a78998042a ()
看板R_Language
标题Re: [问题] 矩阵的处理...拜求各位大大
时间Wed Sep 6 15:10:26 2017
来个基本语法版
通常遇到行列数量差异很大的计算时
就要设法利用R语言物件的原始结构特性
像是如果你有一个矩阵 X
100万列,20行
你需要列加总,你第一个选择不会是
apply(X, 1, sum)
而是
X[,1] + X[,2] +....+ X[,20]
同理可证,原本的问题
# 资料生成
X = matrix(c(replicate(50, c(rep(0, 6), rnorm(1)))),,8, byrow = TRUE)
X[sample(1:dim(X)[1], 10),] = 0
# 生成结果向量
result = rep(NA, dim(X)[1])
# 依行判读
for(i in 1:m)
result[is.na(result) & X[,i]!=0] = X[is.na(result) & X[,i]!=0, i]
result[is.na(result)] = 0
没验算,应该是对的吧..... XD
不知道跟data.table哪个快,晚点再比一下
※ 引述《s3714443 (metalheads)》之铭言:
: http://imgur.com/a/1s7Is
: 资料大概是长这样
: 我想要处理的是:
: 像第8 row就有两个非0的数字
: 那我就是取最左的那column 26.57这个数字
: 倒数第2 row 有26.43跟26.57这两个数字
: 那就是取最左边column的26.43
: 反正就是 先选取特定column(MA10down1~MA10donw9)之中
: 逐row先看有没有非0的数字,有就取最左column的,没有就取0
: 然後就是mutate出来新的一行
: 我想不到除了sapply之外的办法了
: 但是我的资料有500多万笔
: sapply可能会跑到电脑烧掉XD
: 感恩各位
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 115.82.225.9
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1504681836.A.C60.html
1F:→ andrew43: 如果只是加总的话,rowSums还会比一个一个加再快一倍。 09/06 19:40
还真的!! 我居然不知道 XDD
※ 编辑: a78998042a (49.216.162.11), 09/06/2017 22:09:15
2F:→ andrew43: 我也是因为看了这篇好奇才自己测了一下,顺便发现的。 09/06 22:27
3F:→ celestialgod: 不过我会觉得data.table > rowSums XD 09/07 20:29