我有數據,像這樣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