我在R中有一个数据框,记录了客户对多个不同品牌的排名偏好。数据框的示例如下表所示。实际表格在两个维度上都要大得多(大约80,000 x 30)。
我的表格:
+------+---------+---------+---------+---------+
| User | Brand_A | Brand_B | Brand_C | Brand_D |
+------+---------+---------+---------+---------+
| A | 1 | NA | 3 | 2 |
| B | NA | NA | NA | 1 |
| C | 3 | 2 | 4 | 1 |
| D | NA | 1 | 2 | NA |
+------+---------+---------+---------+---------+
其中1表示客户将品牌评为“最佳”,NA表示客户未对品牌进行排名。我想创建一个表格,为每个用户选择前3个(或前N个)排名最高的品牌,并输出类似于以下的表格:
+------+---------+---------+---------+
| User | Ranked1 | Ranked2 | Ranked3 |
+------+---------+---------+---------+
| A | Brand_A | Brand_D | Brand_C |
| B | Brand_D | NA | NA |
| C | Brand_D | Brand_B | Brand_A |
| D | Brand_B | Brand_C | NA |
+------+---------+---------+---------+
假设每个客户的排名都是详尽的,即如果我只使用了一个品牌,则该品牌自动排名第一。
我已经尝试使用for循环来获得所需的输出,但没有成功。我认为我缺少的是一些非常简单的东西。
data.table
,但运行代码后,我收到一个警告消息,告诉我“缺少聚合函数,默认为'length'”。代码仍在运行,但我的输出有一些奇怪的输出列:Ranked1.5,Ranked2.5等。可能是冲突的软件包(我也安装了reshape2)?我不确定。 - user7474113data.table::dcast
吗? - Mike H.