【发布时间】:2013-07-02 10:53:25
【问题描述】:
我开始使用 R 进行开发,但我仍然遇到该语言的“初学者问题”。我想做以下事情:
- 我有一个包含约 900 列的矩阵(数据框:=user),每列都是乐队的名称(Nirvana、Green Day、Daft-Punk 等)。
- 在每一行中,我都有一个用户和用户的音乐品味(Nirvana = 10,Green Day=5,Daft Punkt=0)
- 我想查询另一个数据框(:=artists - 带有艺术家的音乐标签)并用其流派标签替换乐队的名称(Nirvana --> Rock、Green Day --> Rock、Daft-Punk --> 技术)。有大约 120 个用于音乐品味的标签 (120
- 最后,我想“聚合”所有列的值以避免重复列。在 (3) 的示例中 - 使用聚合函数“SUM” - 该行将只有 2 个条目而不是 3 个:(Rock = 15, Techno=0)
关于如何用 R 做到这一点的任何线索?提前感谢您的帮助!
数据:
artists:pastebin.com/dm7weLMG
【问题讨论】:
-
如果没有来自两个数据帧的实际样本数据,您将得到对此的一般反应,这将建议使用
rowSums并查看this question。 -
您能否以
dput(head(artists))和dput(head(user[,1:5]))的输出形式提供此信息? -
你想如何按标签聚合?我的计数(来自
unique(unlist(sapply(artists[,2:6],levels))))是您有 505 个唯一标签,这意味着要添加到user的 505 列(每个标签一个)。并且标签不是互斥的,因此用户波段对的分数可能最终会计入多个标签变量的分数中。这就是你想要的吗? -
+1 摇滚 > 技术。
-
@jcdmb 任何关于如何使用 R 来做到这一点的线索 通常都会转化为一些代码来说明玩具数据的示例。我假设您已经在how to make a great reproducible example 上看到了这个著名的问题