我有一个看起来像这样的data.table:
Fruit Date Count
Apple 8/29/16 20548
Orange 8/29/16 14744
Banana 8/29/16 10605
Strawberry 8/29/16 8341
Watermelon 8/29/16 7768
Apple 8/30/16 9819
Orange 8/30/16 5858
Banana 8/30/16 3624
Strawberry 8/30/16 2595
Watermelon 8/30/16 2291
Apple 8/31/16 6662
Orange 8/31/16 6563
Banana 8/31/16 2073
Strawberry 8/31/16 1827
Watermelon 8/31/16 1738
如何通过Count
&获得Fruit
的总和Date
,然后将总和除以一步产生一个比率(例如Banana / Apple
)?获得总和很容易(注意:我也过滤Fruit
一次只能抓两个):
d.table[Fruit %in% c('Apple', 'Banana'), .(Sum = sum(Count)), .(Fruit, Date)]
但是我只是一步到达了我想要的输出:
Date Rate
8/29/16 0.52
8/30/16 0.37
8/31/16 0.31
我应该注意到我的实际data.table有额外的列(仅用于过滤)并且我不想重塑我的数据/如果可能的话使用另一个包,因为此操作的结果将在之后绘制过滤多个/不断变化的标准,所以我希望能够轻松地重复使用(即单行)。
提前致谢。
答案 0 :(得分:4)
这应该有效:
d.table[Fruit %in% c('Apple', 'Banana'),
.(Rate = sum(Count[Fruit == 'Banana']) / sum(Count[Fruit == 'Apple'])),
.(Date)]
# Date Rate
# 1: 8/29/16 0.5161086
# 2: 8/30/16 0.3690804
# 3: 8/31/16 0.3111678
答案 1 :(得分:2)
以下是dcast
library(data.table)
dcast(setDT(d.table)[Fruit %chin% c("Banana", "Apple")],
Date~Fruit, value.var="Count")[, .(Date, Rate = Banana/Apple)]
# Date Rate
#1: 8/29/16 0.5161086
#2: 8/30/16 0.3690804
#3: 8/31/16 0.3111678