0

異なるデータセット間で発生する変更を確認しています。今のところ、各変更のカウントを取得する単純なループを使用しています。データセットは数値 (一連の数字) であり、各変更が発生した回数をカウントします (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ではるかに大きく、ループは非常に遅くなります。

この計算を改善するのを手伝ってくれる人はいますか?

4

1 に答える 1

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
于 2013-06-29T10:04:26.007 に答える