【发布时间】:2020-12-30 14:17:42
【问题描述】:
我有以下问题。我必须使用以下函数比较矩阵(数据表或数据框)中的数据:
Q <- function(j){
# j = (1:dim(x)[1])[1]
Q1 <- c()
for(i in 2:ncol(x)){
# i = 2
item <- x[j,1]
indices <- which(x[,i] == item)
items <- x[1:indices, i]
Q1 <- c(Q1, items)
}
return(Q1)
}
例如这样的数据:
tablero <- data.frame(t1 = c(1,2,3),
t2 = c(3,1,2),
t3 = c(3,2,1))
我得到这个输出:
Q(1) = 3 1 3 2 1
Q(2) = 3 1 2 3 2
Q(3) = 3 3
问题是我有一个 50.000 行和 7 列的大矩阵,并且该函数太慢并且使用大量内存。在内存使用和速度方面是否有更优化的方式来做同样的事情?
【问题讨论】:
-
你能用几句话解释一下这个函数在做什么吗?
-
这个想法是,对于第 1 列 (t1) 中的每个数字,您可以查看该数字所在的其他列。并且您想保留所有高于您正在查看的数字,包括您正在查看的数字。例如,如果你在 t1 中从 1 开始,你去 t2 并看到只有 2 不高于 1,所以你保持 1 和 3。接下来你看到 t3,你看到 2 和 3 在 1 之上,所以你保留 3、2 和 1。所以加入这两个列表你会得到 Q(1) 是一个具有 3、1、3、2 和 1 的向量。