Liv*_*ree 3 sorting r plyr dataframe
我对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
Run Code Online (Sandbox Code Playgroud)
这只是我的数据集中的一个小样本.我的数据帧超过一百万行.firstword和nextword是字符类型.每个第一个词可以有许多与之相关的下一个词,而有些可能只有一个.
如何从中生成另一个数据帧,使其按desc排序.每个'firstword'的freq顺序,最多只包含前6个nextwords.
我尝试了以下代码.
small = ddply(df, "firstword", summarise, nextword=nextword[order(freq,decreasing=T)[1:6]])
Run Code Online (Sandbox Code Playgroud)
这适用于我的数据的较小子集,但是当我在整个数据上运行时,内存不足.
这是使用该data.table包的类似有效方法.首先,您不需要安排freq在每个组中,只进行一次排序就足够了,效率更高.所以一种方式就是简单
library(data.table)
setDT(df)[order(-freq), .SD[seq_len(6)], by = firstword]
Run Code Online (Sandbox Code Playgroud)
另一种方式(可能更有效)是使用.I参数(I ndex)找到索引,然后使用子集
indx <- df[order(-freq), .I[seq_len(6)], by = firstword]$V1
df[indx]
Run Code Online (Sandbox Code Playgroud)