gpt4 book ai didi

r - table() 的 as.data.frame 总结频率

转载 作者:行者123 更新时间:2023-12-04 09:12:27 24 4
gpt4 key购买 nike

R ,我正在寻找一种节省内存的方法来创建表格数据的摘要,如下所示。

data.frame 为例foo我用过的 table()总结一下,后面是as.data.frame()以获取频率计数。

foo <- data.frame(x= c('a', 'a', 'a', 'b', 'b', 'b'), y=c('ab', 'ac', 'ad', 'ae', 'fx', 'fy'))
bar <- as.data.frame(table(foo), stringsAsFactors=F)

这导致 bar 的以下频率计数
   x  y Freq
1 a ab 1
2 b ab 0
3 a ac 1
4 b ac 0
5 a ad 1
6 b ad 0
7 a ae 0
8 b ae 1
9 a fx 0
10 b fx 1
11 a fy 0
12 b fy 1

我遇到的问题是当 x 的级别很多时和 y ,它开始使用大量内存 > 64 GB。我想知道是否有其他方法可以进行这种频率计数。作为第一步,我设置了 stringsAsFactors=F ,但这并不能完全解决问题。

最佳答案

我有这种快速(稀疏)交叉表的方法。我认为有进一步优化的可能性,但对于大型数据集来说,这对我来说已经足够了。关键是使用ninteraction来自 plyr包以快速为每一行生成一个数字 id。

tab <- function(df, drop = TRUE) {
id <- plyr::ninteraction(df)
ord <- order(id)

df <- df[ord, , drop = FALSE]
id <- id[ord]

freq <- rle(id)$lengths
labels <- unrowname(df[cumsum(freq), , drop = FALSE])

data.frame(labels, freq)
}

关于r - table() 的 as.data.frame 总结频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2714851/

24 4 0