使用 r data.table 的行值与组中行总和的比率
Ratio of row value to sum of rows in a group using r data.table
我在r
中有一个data.table
,我已经总结并分组了。我现在想找到 year
和 quarter
每个 ID
的 value
总和与 value
所有组总和的比率通过 year
和 quarter
.
这似乎是一个足够常见的问题来询问数据,但我无法弄清楚如何使原本令人难以置信的 data.table return 成为答案。
我正在寻找的 table 看起来像这样(添加列 pct_byQtrYr
):
ID year quarter value pct_byQtrYr
1: A 2020 4 4.0 0.195
2: B 2020 4 10.5 0.512
3: C 2020 4 6.0 0.293
4: A 2021 1 6.6 0.293
5: B 2021 1 15.0 0.667
6: C 2021 1 0.9 0.040
7: A 2021 2 6.2 0.198
8: B 2021 2 9.8 0.313
9: C 2021 2 15.3 0.489
10: A 2021 3 5.0 0.526
11: B 2021 3 3.4 0.358
12: C 2021 3 1.1 0.116
原始数据如下:
dt <- data.table(
ID = c( "A", "B", "C",
"A", "B", "C",
"A", "B", "C",
"A", "B", "C"),
year = c(
2020, 2020, 2020,
2021, 2021, 2021,
2021, 2021, 2021,
2021, 2021, 2021),
quarter = c(4, 4, 4,
1, 1, 1,
2, 2, 2,
3, 3, 3),
value = c(4, 10.5, 6,
6.6, 15, 0.9,
6.2, 9.8, 15.3,
5, 3.4, 1.1))
您可以使用 prop.table
获得每个 year
和 quarter
中 value
的比率。
library(data.table)
dt[, pct_byQtrYr := prop.table(value), .(year, quarter)]
dt
# ID year quarter value pct_byQtrYr
# 1: A 2020 4 4.0 0.1951220
# 2: B 2020 4 10.5 0.5121951
# 3: C 2020 4 6.0 0.2926829
# 4: A 2021 1 6.6 0.2933333
# 5: B 2021 1 15.0 0.6666667
# 6: C 2021 1 0.9 0.0400000
# 7: A 2021 2 6.2 0.1980831
# 8: B 2021 2 9.8 0.3130990
# 9: C 2021 2 15.3 0.4888179
#10: A 2021 3 5.0 0.5263158
#11: B 2021 3 3.4 0.3578947
#12: C 2021 3 1.1 0.1157895
这类似于将 value
除以组的 sum
。
dt[, pct_byQtrYr := value/sum(value), .(year, quarter)]
我在r
中有一个data.table
,我已经总结并分组了。我现在想找到 year
和 quarter
每个 ID
的 value
总和与 value
所有组总和的比率通过 year
和 quarter
.
这似乎是一个足够常见的问题来询问数据,但我无法弄清楚如何使原本令人难以置信的 data.table return 成为答案。
我正在寻找的 table 看起来像这样(添加列 pct_byQtrYr
):
ID year quarter value pct_byQtrYr
1: A 2020 4 4.0 0.195
2: B 2020 4 10.5 0.512
3: C 2020 4 6.0 0.293
4: A 2021 1 6.6 0.293
5: B 2021 1 15.0 0.667
6: C 2021 1 0.9 0.040
7: A 2021 2 6.2 0.198
8: B 2021 2 9.8 0.313
9: C 2021 2 15.3 0.489
10: A 2021 3 5.0 0.526
11: B 2021 3 3.4 0.358
12: C 2021 3 1.1 0.116
原始数据如下:
dt <- data.table(
ID = c( "A", "B", "C",
"A", "B", "C",
"A", "B", "C",
"A", "B", "C"),
year = c(
2020, 2020, 2020,
2021, 2021, 2021,
2021, 2021, 2021,
2021, 2021, 2021),
quarter = c(4, 4, 4,
1, 1, 1,
2, 2, 2,
3, 3, 3),
value = c(4, 10.5, 6,
6.6, 15, 0.9,
6.2, 9.8, 15.3,
5, 3.4, 1.1))
您可以使用 prop.table
获得每个 year
和 quarter
中 value
的比率。
library(data.table)
dt[, pct_byQtrYr := prop.table(value), .(year, quarter)]
dt
# ID year quarter value pct_byQtrYr
# 1: A 2020 4 4.0 0.1951220
# 2: B 2020 4 10.5 0.5121951
# 3: C 2020 4 6.0 0.2926829
# 4: A 2021 1 6.6 0.2933333
# 5: B 2021 1 15.0 0.6666667
# 6: C 2021 1 0.9 0.0400000
# 7: A 2021 2 6.2 0.1980831
# 8: B 2021 2 9.8 0.3130990
# 9: C 2021 2 15.3 0.4888179
#10: A 2021 3 5.0 0.5263158
#11: B 2021 3 3.4 0.3578947
#12: C 2021 3 1.1 0.1157895
这类似于将 value
除以组的 sum
。
dt[, pct_byQtrYr := value/sum(value), .(year, quarter)]