У меня есть набор данных, подобный показанному ниже
library(tidyverse)
dat <- data.frame(col.1 = 1:16,
col.2 = c("B", "B", "B", "B", "B", "B", "A", "B",
"A", "A", "B", "A", "A", "A", "A", "A"),
col.3 = c(30, 60, 75, 105, 40, 80, -20, 60, -20, -60, 40,
-40,-105,-20,-20,-45),
col.4 = c(39.34775, 31.66806, 28.57107, 28.43085, 29.30417, 36.21187,
40.29794, 40.70641, 65.85152, 66.85943, 69.26766, 67.24402,
74.85330, 79.17230, 78.75405, 64.47038))
dat
Я пытаюсь добраться до последнего столбца, который выглядит следующим образом:
dat.2 <- dat %>%
mutate(col.Final = c(1180.43, 1900.08, 2142.83, 2985.24, 1172.17,
2896.95, -629.63, 2442.38, -655.37, -1966.11,
2770.71, -1460.48, -3833.76, -730.24, -730.24,
-1643.04))
Пока я пыталсяиспользуя функцию mutate()
для достижения этой точки.
dat.1 <- dat %>%
mutate(col.5 = col.3*col.4) %>%
mutate(col.6 = cumsum(col.3)) %>%
mutate(col.7 = if_else(col.2 == 'B', col.6, col.6 - col.3),
col.8 = col.3/col.7)
Когда я пытаюсь добраться до последнего столбца, я не получаю те же результаты.
dat.1 %>%
mutate(col.9 = if_else(col.2 == 'A', col.8*lag(cumsum(col.5)), col.5))
Примечание: этоТот же расчет был успешно выполнен с использованием функции SUMIFS()
в Excel.
Я пытаюсь получить те же результаты, что и с R
.
Я видел некоторые вопросы и ответы для похожих постов, новсе еще застрял с окончательным расчетом.В Excel казалось, что итерация была выполнена для определенного условия, а затем было выполнено следующее условие.Хотя я не уверен, что было сделано с помощью Excel, думаю, как-то это возможно и с помощью R.Просто не могу понять, как это получить.
На этом этапе будет полезна любая помощь.
Обновление:
Значения для col.5
и col.8
соответствует col.2
:
col.2 = c("B", "B", "B", "B", "B", "B", "A", "B",
"A", "A", "B", "A", "A", "A", "A", "A")
col.5 <- c(1180.4325, 1900.0836, 2142.8302, 2985.2393, 1172.1668,
2896.9496, -805.9588, 2442.3846, -1317.0304, -4011.5658,
2770.7064, -2689.7608, -7859.5965, -1583.4460, -1575.0810,
-2901.1671)
col.8 <-c(1.00000000, 0.66666667, 0.45454545, 0.38888889, 0.12903226,
0.20512821, -0.05128205, 0.13953488, -0.04651163, -0.14634146,
0.10256410,-0.10256410, -0.30000000, -0.08163265, -0.08888889,
-0.21951220)
Проверка значений с помощью ручного расчета!
Расчеты с использованием col.5
& col.8
для "B"сверху:
1180.43 + 1900.08 + 2142.83 + 2985.24 + 1172.17 + 2896.95 = 12277.7020
для A после:
12277.7020 x -0.05128205 = -629.6266509
.... 1-е желаемое значение для A
для "B""после:
12277.720 - 629.6266509 = 11648.07535
11648.07535 + 2442.3846 = 14090.45995
для" A "после:
14090.45995 x -0.04651163 = -655.37026 ... 2nd desired Value for A
для" A "после:
14090.45995 - 655.37026 = 13435.08969
13435.08969 x -0.14634146 = -1966.110641 ... 3rd desired value for A
и т. д ....
Надеюсь, это объясняет.