【发布时间】:2017-12-31 13:06:14
【问题描述】:
我正在参加 Kaggle Instacart 比赛,但我对 R 很陌生,遇到了一些我无法弄清楚的事情。
我有一个包含 4 列的数据集。第一列是订单 ID (id1)。第二列是产品 ID (id2)。第三列是我想从订单 id1 中选择产品 id2 的概率,我们可以将其视为排名,因此总是选择较高的概率而不是较小的概率。最后,第四列是我想从给定订单中选择的产品数量(订单的一个特征)。例如,我这里有数据框 df 的前 12 行:
id1 id2 prob num
1 17 13107 0.4756982 3
2 17 21463 0.3724126 3
3 17 38777 0.3534422 3
4 17 21709 0.3364623 3
5 17 47766 0.3364623 3
6 17 39275 0.3165896 3
7 34 16083 0.4093785 4
8 34 39475 0.3892882 4
9 34 47766 0.3892882 4
10 34 2596 0.3837562 4
11 34 21137 0.3762758 4
12 34 47792 0.3737032 4
我们可以看到,从 id1 = 17 我想选择 3 个元素,而对于 id1 = 34 我想选择 4 个元素。结果应该是
ID1 ID2
17 13107, 21463, 38777
34 16083, 39475, 47766, 2596
或类似的东西。
目前我已经尝试使用
df %>% group_by(id1) %>% top_n(n = num)
但我得到了错误
Selecting by num
Error in is_scalar_integerish(n) : object 'num' not found
有人知道我会怎么做吗?
谢谢
【问题讨论】:
-
您已经有了答案,但您知道,
top_n只接受标量作为输入。您还需要定义要在其中排名的变量。