Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 计算矩阵中所有整数的出现次数_R - Fatal编程技术网

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

R 计算矩阵中所有整数的出现次数,r,R,我有一个包含20000行和300列的数组。每个元素都是一个整数。我想计算这个矩阵中每个整数的出现次数 我尝试了以下方法: >frequency_Table=read.csv('huge_file.csv',header=FALSE,check.names=FALSE) >table(frequency_Table) 我得到了错误“尝试创建一个包含>=2^31个元素的表”,这在阅读后是有意义的 我想要这样的东西: 1 2000 2 2023 3

我有一个包含20000行和300列的数组。每个元素都是一个整数。我想计算这个矩阵中每个整数的出现次数

我尝试了以下方法:

 >frequency_Table=read.csv('huge_file.csv',header=FALSE,check.names=FALSE)
 >table(frequency_Table)
我得到了错误“尝试创建一个包含>=2^31个元素的表”,这在阅读后是有意义的

我想要这样的东西:

1        2000
2        2023
3        5683

基本上,一个频率表的排序,为所有的数字。任何建议都将不胜感激

频率表对象是一个
data.frame
。我们
unlist
(假设OP需要
R
解决方案,因为数据集是用
R
语法读取的)它将生成
向量
,然后用

as.data.frame(table(unlist(frequency_table)))
数据
set.seed(24)

频率表可以执行以下操作:

>>> 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

你能找到一种快速获取数据中所有唯一整数的方法吗? 我的想法是,在找出data.frame中唯一的整数之后。您可以使用代码
sapply(unique_int,函数(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

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

使用堆栈():

使用非列表:

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

您已经将问题标记为Python和R。我的答案是Python。但再看看你的语法,我觉得你的代码是R。为什么这个问题被标记为Python?你实际上是在做
table(column1、column2、column3、column4、column5等)
,如果你先在一个较小的表上尝试,这一点很快就会显现出来。这就是在发布Stackoverflow之前尝试创建一个最小示例的价值所在——您经常会在尝试组合一个问题的过程中找到答案。实际上,我无意中包含了python,对此表示抱歉。但是Python的答案同样有效。从@akrun的响应中,您可以尝试
unique(unlist(您的数据帧))
来获得唯一的整数。
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
tapply(stack(frequency_Table)[,1],factor(stack(frequency_Table)[,1]),length)
tapply(unlist(frequency_Table),factor(unlist(frequency_Table)),length)