首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重复行计数频率

重复行计数频率
EN

Stack Overflow用户
提问于 2016-06-20 12:06:09
回答 2查看 1.6K关注 0票数 1

我有一个矩阵与大量的重复,并希望获得一个矩阵与独特的行和频率计数的每一个独特的行。

下面所示的示例解决了这个问题,但速度慢得令人痛苦。

代码语言:javascript
复制
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是最快的解决方案。

代码语言:javascript
复制
[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 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-20 12:12:03

看起来像是data.table的工作,因为您需要一些可以快速聚合的东西。

代码语言:javascript
复制
library(data.table)


m <- matrix(c(1,2,3,4,3,4,1,2,3,4),ncol=2,byrow=T)

mdt <- as.data.table(m)

res <- mdt[,.N, by=names(mdt)]
res
# > res
# V1 V2 N
# 1:  1  2 2
# 2:  3  4 3
票数 5
EN

Stack Overflow用户

发布于 2016-06-20 12:17:59

使用base R提取唯一行如何:

代码语言:javascript
复制
mat <- matrix(c(2,5,3,5,2,3,4,2,3,5,4,2,1,5,3,5), ncol = 2, byrow = T)
mat[!duplicated(mat),]

     # [,1] [,2]
# [1,]    2    5
# [2,]    3    5
# [3,]    2    3
# [4,]    4    2
# [5,]    1    5

提取独特的行及其频率:

代码语言:javascript
复制
m <- as.data.frame(mat)
aggregate(m, by=m, length)[1:(ncol(m)+1)]

  # V1 V2 V1.1
# 1  4  2    2
# 2  2  3    1
# 3  1  5    1
# 4  2  5    1
# 5  3  5    3
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37922175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档