-2

我有以下形式的数据:

"almond" "blueberry" 3
"almond" "leek" 6
"almond" "citron" 7
"almond" "fish" 2
...
"leek" "swiss_cheese" 3
"leek" "pumpkin" 5
"leek" "onion" 4
"leek" "chocolate" 10
...

对于第一列中的每个值,我想根据第三列找到k个最佳合作伙伴。“最佳”是指:第三行中的较低数字。因此,对于杏仁来说,它的三个最佳搭档是鱼、蓝莓、韭菜。对于韭菜来说,它的三个最佳搭档是swiss_cheese洋葱和南瓜。我最后想将全表减少到第一列中每个因素的三个最佳合作伙伴,即

"almond" "blueberry" 3
"almond" "leek" 6
"almond" "fish" 2
...
"leek" "swiss_cheese" 3
"leek" "pumpkin" 5
"leek" "onion" 4
...
4

1 回答 1

0

所以,我发现这样做的一种方法是

require(plyr)
t <- ddply(table, .(V1), transform, rank = rank(V3))
z <- t[rank <= k,]

如果尚未加载,第一行将加载包。第二个将最后一列添加到中,该列称为排名,包含根据第三列(“V3”)的每一行的排名,由第一列(“V1”)聚合。即,对于第一列中的每个不同值,包含它的所有行都有一个本地排名。在第二步中,我可以只对那些秩小于给定k的行进行子集化。

于 2012-11-03T18:12:30.860 回答