计算矩阵中所有整数的出现次数

时间:2015-12-17 04:26:25

标签: r

我有一个包含20,000行和300列的数组。每个元素都是整数。我想计算这个矩阵中每个整数的出现次数。 enter image description here

我尝试了以下内容:

 >frequency_Table=read.csv('huge_file.csv',header=FALSE,check.names=FALSE)
 >table(frequency_Table)

我收到错误“尝试使用> = 2 ^ 31个元素创建一个表”,这在阅读之后才有意义。

我想要这样的事情:

1        2000
2        2023
3        5683

基本上,所有数字的频率表。任何建议将不胜感激!

5 个答案:

答案 0 :(得分:3)

' frequency_table'对象是data.frame。我们unlist(假设OP需要R解决方案,因为数据集已经使用R语法读取),它可以生成vector,然后获得{{1}的频率}}

table

数据

as.data.frame(table(unlist(frequency_table)))

答案 1 :(得分:2)

from collections import Counter
from numpy import np

Counter(np.array(frequency_Table).flatten())

答案 2 :(得分:1)

numpy.unique可以执行此操作:

>>> import numpy as np
>>> table = np.array([[1, 2, 3], [2, 2, 3], [3, 2, 3]])
>>> values, counts = np.unique(table, return_counts = True)
>>> for value, count in zip(values, counts):
...     print("{}\t{}".format(value, count))
...
1       1
2       4
3       4

答案 3 :(得分:1)

你能找到一种快速获取data.fame中所有唯一整数的方法吗? 我的想法是在你找到data.frame中的唯一整数之后。您可以使用代码sapply(unique_int, function(x) sum(m == x))找出每个整数的相应匹配项。

这是我尝试过的代码:

m <- matrix(sample(1:10, size=20000*300, replace=TRUE), ncol=300)
#A way to get the unique integers
unique_int <- unique(c(m))

#Count
count <- sapply(unique_int, function(x) sum(m == x))

names(count) <- unique_int
count

## 10      8      3      9      6      5      4      1      2      7 
## 598551 600413 599396 599517 600114 600503 601311 601205 599268 599722

答案 4 :(得分:1)

这里是R中的1行解决方案: 您可以使用stack()或unlist将数据集的所有列排列在一个中。基于此,您可以将堆叠数据集的第一列定义为因子,并使用tapply将length作为函数,从而为您提供每个元素的频率:

使用stack():

tapply(stack(frequency_Table)[,1],factor(stack(frequency_Table)[,1]),length)

使用取消列表:

tapply(unlist(frequency_Table),factor(unlist(frequency_Table)),length)