有效计算2个或更多矩阵或向量之间的值变化的方法

时间:2013-06-29 09:38:16

标签: r loops matrix

我正在检查不同数据集之间发生的变化,现在我正在使用一个简单的循环,它给出了每个变化的计数。数据集是数字(一系列数字),我计算每次更改发生的次数(1次更改为5次XX次):

n=100
tmp1<-sample(1:25, n, replace=T)
tmp2<-sample(1:25, n, replace=T)
values_tmp1=sort(unique(tmp1))
values_tmp2=sort(unique(tmp2))

count=c()
i=1
for (m in 1:length(values_tmp1)){
  for (j in 1:length(values_tmp2)){
    count[i]=length(which(tmp1==values_tmp1[m] & tmp2==values_tmp2[j]))
    i=i+1
  }
}

然而,我的数据在 n = 2000000 时要大得多,并且循环变得非常慢。

有人可以帮我改进这个计算吗?

1 个答案:

答案 0 :(得分:2)

喜欢这个吗?

tmp1 <- c(1:5,3)
tmp2 <- c(1,3,3,1,5,3)

aggregate(tmp1,list(tmp1,tmp2),length)
#   Group.1 Group.2 x
# 1       1       1 1
# 2       4       1 1
# 3       2       3 1
# 4       3       3 2
# 5       5       5 1

对于大型数据集,这可能会更快:

library(data.table)
DT <- data.table(cbind(tmp1,tmp2),key=c("tmp1","tmp2"))
DT[,.N,by=key(DT)]

#    tmp1 tmp2 N
# 1:    1    1 1
# 2:    2    3 1
# 3:    3    3 2
# 4:    4    1 1
# 5:    5    5 1