如何在忽略 r 中的 NaN 的同时使用 cumsum
How to you use cumsum whilst ignoring NaNs in r
我有一个包含四列的数据集,我想创建第五列,这将是第四列的累加和。
数据集:
Col1 Col2 Col3 Col4
2017-12-26 0.000000e+00 NaN NaN
2017-12-27 3.295056e-05 NaN NaN
2017-12-28 2.998402e-03 NaN NaN
2017-12-29 -3.777862e-03 NaN NaN
2018-01-01 0.000000e+00 NaN NaN
2018-01-02 -6.265354e-04 0.001210748 -1.837284e-03
2018-01-03 1.501328e-03 0.001505680 -4.351903e-06
2018-01-04 1.103716e-03 0.001266719 -1.630024e-04
2018-01-05 7.437758e-03 0.005948840 1.488918e-03
2018-01-08 1.323032e-03 0.000949433 3.735992e-04
输出:
structure(list(date = structure(c(17526, 17527, 17528, 17529,
17532, 17533, 17534, 17535, 17536, 17539, 17540, 17541), class = "Date"),
S.P.ASX.200 = c(0, 3.29505576881495e-05, 0.00299840195060885,
-0.00377786173026062, 0, -0.000626535423983166, 0.0015013280979328,
0.00110371639430684, 0.00743775814121861, 0.00132303219378338,
0.000880856061594715, -0.00637243717200697), portfolio.average = c(NaN,
NaN, NaN, NaN, NaN, 0.00121074842324788, 0.00150568000136751,
0.00126671875198612, 0.00594883984640553, 0.000949433018286304,
-0.00477888742856801, -0.007316033066539), marketed_adjusted_return = c(NaN,
NaN, NaN, NaN, NaN, -0.00183728384723105, -4.35190343470821e-06,
-0.000163002357679275, 0.00148891829481308, 0.000373599175497076,
0.00565974349016273, 0.000943595894532028)), row.names = 612:623, class = "data.frame")
我试过使用下面的函数,但它returns第五列只有 NaN。
cumulative_a <- a %>%
mutate(cumulative = cumsum(a[,4]))
有没有办法在忽略 NaN 值的同时执行 cumsum?
您可以将 NA
替换为 0 然后使用 cumsum
:
df$cum_a <- cumsum(replace(df$marketed_adjusted_return,
is.na(df$marketed_adjusted_return), 0))
做你的 cumsum 时忽略 NaN
:
a$cumsum <- replace(a[,4], !is.nan(a[,4]), cumsum(a[,4][!is.nan(a[,4])]))
a
#> date S.P.ASX.200 portfolio.average marketed_adjusted_return cumsum
#> 612 2017-12-26 0.000000e+00 NaN NaN NaN
#> 613 2017-12-27 3.295056e-05 NaN NaN NaN
#> 614 2017-12-28 2.998402e-03 NaN NaN NaN
#> 615 2017-12-29 -3.777862e-03 NaN NaN NaN
#> 616 2018-01-01 0.000000e+00 NaN NaN NaN
#> 617 2018-01-02 -6.265354e-04 0.001210748 -1.837284e-03 -0.0018372838
#> 618 2018-01-03 1.501328e-03 0.001505680 -4.351903e-06 -0.0018416358
#> 619 2018-01-04 1.103716e-03 0.001266719 -1.630024e-04 -0.0020046381
#> 620 2018-01-05 7.437758e-03 0.005948840 1.488918e-03 -0.0005157198
#> 621 2018-01-08 1.323032e-03 0.000949433 3.735992e-04 -0.0001421206
#> 622 2018-01-09 8.808561e-04 -0.004778887 5.659743e-03 0.0055176229
#> 623 2018-01-10 -6.372437e-03 -0.007316033 9.435959e-04 0.0064612187
我有一个包含四列的数据集,我想创建第五列,这将是第四列的累加和。
数据集:
Col1 Col2 Col3 Col4
2017-12-26 0.000000e+00 NaN NaN
2017-12-27 3.295056e-05 NaN NaN
2017-12-28 2.998402e-03 NaN NaN
2017-12-29 -3.777862e-03 NaN NaN
2018-01-01 0.000000e+00 NaN NaN
2018-01-02 -6.265354e-04 0.001210748 -1.837284e-03
2018-01-03 1.501328e-03 0.001505680 -4.351903e-06
2018-01-04 1.103716e-03 0.001266719 -1.630024e-04
2018-01-05 7.437758e-03 0.005948840 1.488918e-03
2018-01-08 1.323032e-03 0.000949433 3.735992e-04
输出:
structure(list(date = structure(c(17526, 17527, 17528, 17529,
17532, 17533, 17534, 17535, 17536, 17539, 17540, 17541), class = "Date"),
S.P.ASX.200 = c(0, 3.29505576881495e-05, 0.00299840195060885,
-0.00377786173026062, 0, -0.000626535423983166, 0.0015013280979328,
0.00110371639430684, 0.00743775814121861, 0.00132303219378338,
0.000880856061594715, -0.00637243717200697), portfolio.average = c(NaN,
NaN, NaN, NaN, NaN, 0.00121074842324788, 0.00150568000136751,
0.00126671875198612, 0.00594883984640553, 0.000949433018286304,
-0.00477888742856801, -0.007316033066539), marketed_adjusted_return = c(NaN,
NaN, NaN, NaN, NaN, -0.00183728384723105, -4.35190343470821e-06,
-0.000163002357679275, 0.00148891829481308, 0.000373599175497076,
0.00565974349016273, 0.000943595894532028)), row.names = 612:623, class = "data.frame")
我试过使用下面的函数,但它returns第五列只有 NaN。
cumulative_a <- a %>%
mutate(cumulative = cumsum(a[,4]))
有没有办法在忽略 NaN 值的同时执行 cumsum?
您可以将 NA
替换为 0 然后使用 cumsum
:
df$cum_a <- cumsum(replace(df$marketed_adjusted_return,
is.na(df$marketed_adjusted_return), 0))
做你的 cumsum 时忽略 NaN
:
a$cumsum <- replace(a[,4], !is.nan(a[,4]), cumsum(a[,4][!is.nan(a[,4])]))
a
#> date S.P.ASX.200 portfolio.average marketed_adjusted_return cumsum
#> 612 2017-12-26 0.000000e+00 NaN NaN NaN
#> 613 2017-12-27 3.295056e-05 NaN NaN NaN
#> 614 2017-12-28 2.998402e-03 NaN NaN NaN
#> 615 2017-12-29 -3.777862e-03 NaN NaN NaN
#> 616 2018-01-01 0.000000e+00 NaN NaN NaN
#> 617 2018-01-02 -6.265354e-04 0.001210748 -1.837284e-03 -0.0018372838
#> 618 2018-01-03 1.501328e-03 0.001505680 -4.351903e-06 -0.0018416358
#> 619 2018-01-04 1.103716e-03 0.001266719 -1.630024e-04 -0.0020046381
#> 620 2018-01-05 7.437758e-03 0.005948840 1.488918e-03 -0.0005157198
#> 621 2018-01-08 1.323032e-03 0.000949433 3.735992e-04 -0.0001421206
#> 622 2018-01-09 8.808561e-04 -0.004778887 5.659743e-03 0.0055176229
#> 623 2018-01-10 -6.372437e-03 -0.007316033 9.435959e-04 0.0064612187