我有数据,像这样R数据文件表 - 将分组的列到选择的数据
dt <- data.table(group = rep(1:3,100),
price = rep(1:10, 30),
currency = rep(1:2,150)
)
> dt
group price currency
1: 1 1 1
2: 2 2 2
3: 3 3 1
4: 1 4 2
5: 2 5 1
---
296: 2 6 2
297: 3 7 1
298: 1 8 2
299: 2 9 1
300: 3 10 2
本质上为每个组我有一个号码被在收费价格项目。一些项目的价格在货币1和一些货币2.我可以很容易地总结营收为组
dt[, .(varname="total revenue",
value = sum(price)
),
by = list(group)
]
group varname value
1: 1 total revenue 550
2: 2 total revenue 550
3: 3 total revenue 550
而且我也可以很容易地总结为组和货币
dt[, .(varname="total revenue",
value = sum(price)
),
by = list(group,currency)
]
group currency varname value
1: 1 1 total revenue 250
2: 2 2 total revenue 300
3: 3 1 total revenue 250
4: 1 2 total revenue 300
5: 2 1 total revenue 250
6: 3 2 total revenue 300
但我真的很想拥有一个包含组的数据表,其中包含货币名称和总计值。我可以计算一下我想
dt[, .(varname=paste("total revenue",currency),
value = sum(price)
),
by = list(group,currency)
]
group currency varname value
1: 1 1 total revenue 1 250
2: 2 2 total revenue 2 300
3: 3 1 total revenue 1 250
4: 1 2 total revenue 2 300
5: 2 1 total revenue 1 250
6: 3 2 total revenue 2 300
但最好我想摆脱货币列的值现在出现在变量的名称。我能做到这一点与链接像这样
x <- dt[, .(varname=paste("total revenue",currency),
value = sum(price)
),
by = list(group,currency)
][, currency:=NULL]
> x
group varname value
1: 1 total revenue 1 250
2: 2 total revenue 2 300
3: 3 total revenue 1 250
4: 1 total revenue 2 300
5: 2 total revenue 1 250
6: 3 total revenue 2 300
但我不知道这是“正确”的方式与数据表来实现这一点。我也许认为有一种方法可以用一个命令来完成,即不使用链接。我不反对链接,只是想知道是否有替代使用data.table语法。
任何意见/建议表示赞赏
啊太棒了 - 谢谢。更可读的海事组织。我专注于选择的列而不是分组。仍然试图在SQL上下文中考虑data.table语法,但我认为我需要突破这一点。 – user7863288