我有data.table
,如下所示:
x, y, sum(count)
1, 1, 3
1, 2, 7
1, 3, 8
2, 1, 4
2, 2, 3
2, 3, 10
等等。它由x
和y
键入,我在sum
列上做了count
。我想将其分解为x的值,使其变为:
x, y, percentage(counts)
1, 1, 16.7
1, 2, 38.9
1, 3, 44.4
2, 1, 23.5
2, 2, 17.6
2, 3, 58.8
这样每个x
值的总百分比总计为100%。我正在使用data.table
包执行此操作。提前感谢您的帮助。
答案 0 :(得分:6)
我不太了解已经发布的data.table
解决方案,所以我会这样做(我会更改列的名称,不要有括号,以避免大量的反引号引用(!)列名称:
dt[ , `percentage(counts)` := `sum(count)` / sum( `sum(count)` ) * 100 , by = "x" ]
# x y sum(count) percentage(counts)
#1: 1 1 3 16.66667
#2: 1 2 7 38.88889
#3: 1 3 8 44.44444
#4: 2 1 4 23.52941
#5: 2 2 3 17.64706
#6: 2 3 10 58.82353
答案 1 :(得分:2)
在您的原始(未汇总)数据上,您可以这样做:
allsums <- sum(data[, counts])
data[, percentage = 100*sum(counts)/allsums, by="x,y"]
或者总结数据:
allsums <- sum(data[, sums])
data[, percentage = 100*sums/allsums, by="x,y"]