我有这样的数据:
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
...
其中一个对象出现在不同的(类别, 国家)
对中,各国共享一个类别列表。
我想添加另一列,即每个国家的类别权重 - 在一个类别中出现的对象数量,归一化为国家内总和为1(仅针对唯一的(类别, 国家)
对进行求和)。
我可以这样做:
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
...
上述内容针对每个唯一的(类别,国家)
对在国内求和后等于1。