我有一個包含大量重複項的矩陣,並希望獲得具有唯一行和每個唯一行的頻率計數的矩陣。重複行的計數頻率
下面顯示的例子解決了這個問題,但是速度很慢。
rowsInTbl <- function(tbl,row){
sum(apply(tbl, 1, function(x) all(x == row)))
}
colFrequency <- function(tblall){
tbl <- unique(tblall)
results <- matrix(nrow = nrow(tbl),ncol=ncol(tbl)+1)
results[,1:ncol(tbl)] <- as.matrix(tbl)
dimnames(results) <- list(c(rownames(tbl)),c(colnames(tbl),"Frequency"))
freq <- apply(tbl,1,function(x)rowsInTbl(tblall,x))
results[,"Frequency"] <- freq
return(results)
}
m <- matrix(c(1,2,3,4,3,4,1,2,3,4),ncol=2,byrow=T)
dimnames(m) <- list(letters[1:nrow(m)],c("c1","c2"))
print("Matrix")
print(m)
[1] "Matrix"
c1 c2
a 1 2
b 3 4
c 3 4
d 1 2
e 3 4
print("Duplicate frequency table")
print(colFrequency(m))
[1] "Duplicate frequency table"
c1 c2 Frequency
a 1 2 2
b 3 4 3
這裏是@Heroka和@ m0h3n答案的速度測量結果與我的例子相比。上面顯示的矩陣重複了1000次。 Data.table顯然是最快的解決方案。
[1] "Duplicate frequency table - my example"
user system elapsed
0.372 0.000 0.371
[1] "Duplicate frequency table - data.table"
user system elapsed
0.008 0.000 0.008
[1] "Duplicate frequency table - aggregate"
user system elapsed
0.092 0.000 0.089
在我看來,這個問題的不同之約的問題應用函數,因爲這裏的問題是,一個大的數據集應用功能太慢,需要不同的方法 – scs
是的,對不起,我貼了這個wron g鏈接:參見[this one](http://stackoverflow.com/questions/1660124/how-to-sum-a-variable-by-group),它是按總和分組的,但想法是一樣的。 – zx8754
我檢查了鏈接,並確認重複 – scs