我正在为两个矩阵运行双重forloop。但是一个矩阵有大约90,000行。 在R.中太慢所以,如果可能的话,我想对此采取应用函数。
所以,我想将一列匹配的月份信息从第二个矩阵合并到第一个垫子。
输出垫的第一行将是2月的AAAA12而不是使用for循环,我怎样才能快速生成这样的矩阵?
任何输入都会有所帮助。
答案 0 :(得分:3)
以下可能会做到这一点:
m1 <- matrix(c('AAAA12', 'AAAA23', 'AAAA14'))
m2 <- cbind(c('AAAA23', 'AAAA12', 'AAAA14'), c('Jan', 'Feb', 'Mar'))
cbind(m1, m2[match(m1[,1], m2[,1]),2])
哪个给你
[,1] [,2]
[1,] "AAAA12" "Feb"
[2,] "AAAA23" "Jan"
[3,] "AAAA14" "Mar"
...然后在大约90000行上计时显示大约需要0.04秒:
x <- outer(outer(outer(LETTERS, LETTERS, paste, sep=''),
LETTERS, paste, sep=''), 1:5, paste, sep='')
set.seed(42)
m1 <- matrix(sample(x, 85000))
m2 <- cbind(x, seq_along(x))
system.time( cbind(m1, m2[match(m1[,1], m2[,1]),2]) ) # 0.04 seconds
答案 1 :(得分:2)
apply
不会比for
- 循环快。您需要merge
或match
。