使用直方图作为R中的输入

时间:2012-09-11 18:35:35

标签: r input histogram

这无疑是一个非常简单的问题,我找不到答案。

在R中,我有一个包含2列的文件:1个分类数据名称,第二个是计数列(每个类别的计数)。 使用小数据集,我会使用'reshape'和'untable'函数来制作1列并按此方式进行分析。问题是,如何使用大数据集处理此问题

在这种情况下,我的数据很有意义,而且不会起作用。

我的问题是,如何告诉R使用以下内容作为分发数据:

Cat Count
A   5
B   7
C   1

也就是说,我给它一个直方图作为输入,让R计算出它意味着在计算有关数据的其他信息时,有5个A,7个B和1个C.

所需的输入而非输出将是R了解数据将如下所示,

一个 一个 一个 一个 一个 乙 乙 乙 乙 乙 乙 乙 ç

在合理大小的数据中,我可以自己做,但是当数据非常大时你会怎么做?

修改

所有计数的总和为262,916,849。

就其用途而言:

这是新数据,试图了解这些新数据与其他数据之间的相关性。需要处理线性回归和混合模型。

4 个答案:

答案 0 :(得分:7)

认为你所要求的是重塑一个类别的数据框并计入一个观察向量,其中重复了类别。这是一种方式:

dat <- data.frame(Cat=LETTERS[1:3],Count=c(5,7,1))
#  Cat Count
#1   A     5
#2   B     7
#3   C     1
rep.int(dat$Cat,times=dat$Count)
# [1] A A A A A B B B B B B B C
#Levels: A B C

答案 1 :(得分:4)

要跟进@Blue Magister的优秀答案,这里有一个100,000行直方图,总计数为551,245,193:

set.seed(42)
Cat <- sapply(rep(10, 100000), function(x) {
  paste(sample(LETTERS, x, replace=TRUE), collapse='')
  })
dat <- data.frame(Cat, Count=sample(1000:10000, length(Cat), replace=TRUE))
> head(dat)
         Cat Count
1 XYHVQNTDRS  5154
2 LSYGMYZDMO  4724
3 XDZYCNKXLV  8691
4 TVKRAVAFXP  2429
5 JLAZLYXQZQ  5704
6 IJKUBTREGN  4635

根据我的标准,这是一个非常大的数据集,Blue Magister描述的操作非常快:

> system.time(x <- rep(dat$Cat,times=dat$Count))
   user  system elapsed 
   4.48    1.95    6.42 

它使用大约6GB的RAM来完成操作。

答案 2 :(得分:2)

这实际上取决于您要计算的统计数据。 xtabs函数将为您创建表,您可以在其中指定计数。 Hmisc包具有类似wtd.mean的函数,它将采用权重向量来计算均值(以及标准偏差,分位数等的相关函数)。 biglm包可用于一次扩展数据集的一部分并进行分析。可能还有其他软件包可以处理频率数据,但最好取决于您要回答的问题。

答案 3 :(得分:0)

现有的答案都是将预先分箱的数据集扩展为完整的分布,然后使用R的直方图函数,这是一种内存效率低的函数,并且不会像原始海报那样对非常大的数据集进行缩放。 HistogramTools CRAN包中包含一个 PreBinnedHistogram函数,它接受中断和计数的参数,以便在R中创建直方图对象而不会大规模扩展数据集。

例如,如果数据集包含3个包含5,7和1个元素的存储桶,则此处发布的所有其他解决方案到目前为止将其扩展为包含13个元素的列表,然后创建直方图。相反,PreBinnedHistogram直接从3元素输入列表创建直方图,而不会在内存中创建更大的中间向量。

big.histogram <- PreBinnedHistogram(my.data$breaks, my.data$counts)