从 R 中的 data.frame 获取大型数据集的前 N ​​个排序元素

Getting the top N sorted elements from a data.frame in R for large dataset

我对 R 比较陌生,所以这可能是一个简单的问题。我尝试广泛搜索答案,但找不到答案。

我有一个以下形式的数据框:

firstword  nextword   freq
a          little     23
a          great      46
a          few        32
a          good       15
about      the        57
about      how        34
about      a          48 
about      it         27
by         the        36
by         his        52
by         an         12
by         my         16

这只是我的数据集中的一个小示例,用于说明。我的数据框超过一百万行。 firstword 和 nextword 是字符类型。每个第一个词可以有多个与之关联的下一个词,而有些可能只有一个。

如何从中生成另一个数据框,使其按 desc 排序。每个 'firstword' 的频率顺序,最多只包含前 6 个下一个词。

我尝试了以下代码。

small = ddply(df, "firstword", summarise, nextword=nextword[order(freq,decreasing=T)[1:6]])

这适用于我的数据的较小子集,但是当我 运行 它用于我的整个数据时 运行 内存不足。

dplyr 包是为此目的创建的,用于处理大型数据集。试试这个

library(dplyr)

df %>% group_by(firstword) %>% arrange(desc(Freq)) %>% top_n(6)

这是使用 data.table 包的类似有效方法。 首先,不需要把freq排成组,只排一次就够了,而且效率更高。所以一种方法就是

library(data.table)
setDT(df)[order(-freq), .SD[seq_len(6)], by = firstword]

另一种方法(可能更有效)是使用 .I 参数 (Index) 查找索引,然后子集

indx <- df[order(-freq), .I[seq_len(6)], by = firstword]$V1
df[indx]