我有一个包含20,000行和300列的数组。每个元素都是整数。我想计算这个矩阵中每个整数的出现次数。
我尝试了以下内容:
>frequency_Table=read.csv('huge_file.csv',header=FALSE,check.names=FALSE)
>table(frequency_Table)
我收到错误“尝试使用> = 2 ^ 31个元素创建一个表”,这在阅读之后才有意义。
我想要这样的事情:
1 2000
2 2023
3 5683
基本上,所有数字的频率表。任何建议将不胜感激!
答案 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)