这无疑是一个非常简单的问题,我找不到答案。
在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。
就其用途而言:
这是新数据,试图了解这些新数据与其他数据之间的相关性。需要处理线性回归和混合模型。
答案 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)