如何使用data.table获取R中键的每个值的百分比?

kay*_*kay 6 r data.table

我有一个data.table看起来如下:

x, y, sum(count)
1, 1, 3
1, 2, 7
1, 3, 8
2, 1, 4
2, 2, 3
2, 3, 10
Run Code Online (Sandbox Code Playgroud)

等等.它的关键是xy我做了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
Run Code Online (Sandbox Code Playgroud)

这样每个x值的总百分比总计为100%.我正在使用data.table包这样做.预先感谢您的帮助.

Sim*_*lon 7

我不太明白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
Run Code Online (Sandbox Code Playgroud)

  • 另见`prop.table()` (3认同)
  • 正如haldey所说,你可以使用`prop.table()`函数,例如`dt [,per:= prop.table(\`sum(count)\`),by ="x"]`. (3认同)