Мои данные выглядят следующим образом:
DF <- structure(list(No_Adjusted_Gross_Income = structure(c(1L, 1L,
2L, 2L, 3L, 3L), .Label = c("A", "B", "C"), class = "factor"),
NoR_from_1_to_5000 = c(1035373, 4272260, 1124098, 1035373,
4272260, 1124098), NoR_from_5000_to_10000 = c(319540, 4826042,
1959866, 319540, 4826042, 1959866), AGI_from_1_to_5000 = c(2588950186.5,
10682786130, 2810807049, 2588950186.5, 10682786130, 2810807049
), AGI_from_5000_to_10000 = c(2396550000, 36195315000, 14698995000,
2396550000, 36195315000, 14698995000)), class = "data.frame", row.names = c(NA,
-6L))
vn <- c("sum1", "sum2", "sum3", "sum4")
No_Adjusted_Gross_Income NoR_from_1_to_5000 NoR_from_5000_to_10000 AGI_from_1_to_5000 AGI_from_5000_to_10000
1 A 1035373 319540 2588950187 2396550000
2 A 4272260 4826042 10682786130 36195315000
3 B 1124098 1959866 2810807049 14698995000
4 B 1035373 319540 2588950187 2396550000
5 C 4272260 4826042 10682786130 36195315000
6 C 1124098 1959866 2810807049 14698995000
Для каждого из столбцов со 2 по 5, я хотел бы создать новый столбец, который имеет в качестве своего значения исходное значение, разделенное на сумму значений на No_Adjusted_Gross_Income
.
Я сначала попробовал с суммой:
DF[, (vn) := as.data.table ( t( t( DF[, 2:5, by=c("No_Adjusted_Gross_Income")] )) ) ][]
Но я получаю сообщение об ошибке:
Error in `:=`((vn), as.data.table(t(t(DF[, 2:5, by = c("No_Adjusted_Gross_Income")])))) :
Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(":=").
Как мне сделать это правильно? И могу ли я напрямую разделить значение исходного столбца на эту сумму?
Желаемый результат для сумм:
DF <- setDT(DF)[, sum_1 := sum(NoR_from_1_to_5000),by=c("No_Adjusted_Gross_Income")]
DF <- setDT(DF)[, sum_2 := sum(NoR_from_5000_to_10000),by=c("No_Adjusted_Gross_Income")]
DF <- setDT(DF)[, sum_3 := sum(AGI_from_1_to_5000),by=c("No_Adjusted_Gross_Income")]
DF <- setDT(DF)[, sum_4 := sum(AGI_from_5000_to_10000),by=c("No_Adjusted_Gross_Income")]
DF <- setDT(DF)[, rat_1 := NoR_from_1_to_5000/sum_1 ,by=c("No_Adjusted_Gross_Income")]
DF <- setDT(DF)[, rat_2 := NoR_from_5000_to_10000/sum_2 ,by=c("No_Adjusted_Gross_Income")]
DF <- setDT(DF)[, rat_3 := AGI_from_1_to_5000/sum_3,by=c("No_Adjusted_Gross_Income")]
DF <- setDT(DF)[, rat_4 := AGI_from_5000_to_10000/sum_4,by=c("No_Adjusted_Gross_Income")]
No_Adjusted_Gross_Income NoR_from_1_to_5000 NoR_from_5000_to_10000 AGI_from_1_to_5000 AGI_from_5000_to_10000 sum_1 sum_2 sum_3 sum_4 rat_1 rat_2 rat_3
1: A 1035373 319540 2588950187 2396550000 5307633 5145582 13271736317 38591865000 0.20 0.062 0.20
2: A 4272260 4826042 10682786130 36195315000 5307633 5145582 13271736317 38591865000 0.80 0.938 0.80
3: B 1124098 1959866 2810807049 14698995000 2159471 2279406 5399757236 17095545000 0.52 0.860 0.52
4: B 1035373 319540 2588950187 2396550000 2159471 2279406 5399757236 17095545000 0.48 0.140 0.48
5: C 4272260 4826042 10682786130 36195315000 5396358 6785908 13493593179 50894310000 0.79 0.711 0.79
6: C 1124098 1959866 2810807049 14698995000 5396358 6785908 13493593179 50894310000 0.21 0.289 0.21
rat_4
1: 0.062
2: 0.938
3: 0.860
4: 0.140
5: 0.711
6: 0.289