【发布时间】:2012-06-20 08:17:16
【问题描述】:
我有这样的数据:
object category country
495647 1 RUS
477462 2 GER
431567 3 USA
449136 1 RUS
367260 1 USA
495649 1 RUS
477461 2 GER
431562 3 USA
449133 2 RUS
367264 2 USA
...
其中一个对象出现在不同的(category, country) 对中,并且国家/地区共享一个类别列表。
我想在其中添加另一列,这将是每个国家/地区的类别权重 - 出现在某个类别的类别中的对象数量,标准化为一个国家/地区内的总和为 1(仅对唯一 @ 987654323@对)。
我可以这样做:
aggregate(df$object, list(df$category, df$country), length)
然后从那里计算权重,但是直接在原始数据上执行此操作的更有效和优雅的方法是什么。
所需的示例输出:
object category country weight
495647 1 RUS .75
477462 2 GER .5
431567 3 USA .5
449136 1 RUS .75
367260 1 USA .25
495649 1 RUS .75
477461 3 GER .5
431562 3 USA .5
449133 2 RUS .25
367264 2 USA .25
...
对于唯一的(category, country) 对,以上内容在国家/地区内总计为一个。
【问题讨论】:
-
可能属于stackoverflow
-
一些预期的输出数据会很好;例如,澄清第 1 行和第 4 行的结果是否都应为 50% 或都应为 100%。您直接在原始数据上要求按国家/地区划分的类别权重,这似乎暗示后者?但在 iiuc 国家/地区内,它的总和不会为 1。
-
感谢 Matthew,您说的很对 - 第 1 行和第 4 行应该是 100%(或 1)。权重在一个国家/地区内应总计为 1,仅考虑唯一(类别、国家/地区)对 - 我正在编辑问题。
标签: r aggregation data.table