Re: [问题] 矩阵的处理...拜求各位大大

楼主: a78998042a (Benjimine)   2017-09-06 15:10:26
来个基本语法版
通常遇到行列数量差异很大的计算时
就要设法利用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
: 感恩各位
作者: andrew43 (讨厌有好心推文后删文者)   2017-09-06 19:40:00
如果只是加总的话,rowSums还会比一个一个加再快一倍。我也是因为看了这篇好奇才自己测了一下,顺便发现的。
作者: celestialgod (天)   2017-09-07 20:29:00
不过我会觉得data.table > rowSums XD

Links booklink

Contact Us: admin [ a t ] ucptt.com