【问题标题】:r: replace NA with 0 when calculating cumulative valuesr:计算累积值时将NA替换为0
【发布时间】:2016-12-04 12:53:40
【问题描述】:

我编写了一段代码,以十分位数计算感兴趣变量的累积值。 我的数据如下所示:

 library(dplyr)
actual=c(1,1,1,0,0,1,1,0,0,1)
prob=c(0.8,0.8,0.2,0.1,0.6,0.7,0.8,0.9,0.7,0.9)
n=1:10
for_chart=data.frame(actual,prob,n)
for_chart=for_chart[with(for_chart, order(-prob)),]
for_chart$decile <- cut(n, breaks = quantile(n, probs = seq(0, 1, 0.1)), 
                        labels = 1:10, include.lowest = TRUE)

这是构建表格并计算累积值的代码。

    out <- for_chart%>%
  group_by(decile)%>%
  summarise(sum=n())%>%
  mutate(cum=cumsum(sum))
out1 <-for_chart%>% 
  filter(actual==1)%>%
  group_by(decile)%>%
  summarise(sum_churn=n())%>%
  mutate(cum_churn=cumsum(sum_churn))
final_out <- left_join(out,out1,by='decile')

"out" 给出 n 的累积计数。 “out1”提供感兴趣变量的累积值,在本例中为“cum_churn”。 “final_out”是决赛桌。当特定十分位数的变量计数为 0 时,代码会放置一个 NA。像这样:

    final_out
    decile   sum   cum sum_churn cum_churn
       (fctr) (int) (int)     (int)     (int)
    1       1     1     1        NA        NA
    2       2     1     2         1         1
    3       3     1     3         1         2
    4       4     1     4         1         3
    5       5     1     5         1         4
    6       6     1     6         1         5
    7       7     1     7        NA        NA
    8       8     1     8        NA        NA
    9       9     1     9         1         6
    10     10     1    10        NA        NA

我希望我的代码: 1. 将 NA 替换为 0 和 2.在累计计数中包含0

要清楚,最终的输出应该是这样的:

  decile   sum   cum sum_churn cum_churn
   (fctr) (int) (int)     (int)     (int)
1       1     1     1         0         0
2       2     1     2         1         1
3       3     1     3         1         2
4       4     1     4         1         3
5       5     1     5         1         4
6       6     1     6         1         5
7       7     1     7         0         5
8       8     1     8         0         5
9       9     1     9         1         6
10     10     1    10         0         6

【问题讨论】:

  • 我猜你想在 left_join 之后替换 NA,因为在此之前我没有得到任何 NA(请使用 set.seed 使其可重现)
  • 你的预期输出是什么?
  • 是的,对不起。现在添加了 set.seed。
  • @LaMachineInfernale 仍然所有 out/out1 都没有 NA。
  • 加NA的是final_out,我试过你的代码,可以,但是没有加累积值。

标签: r dplyr cumulative-sum


【解决方案1】:

我们可以试试

 left_join(out,out1,by='decile') %>%
        mutate_each(funs(replace(., is.na(.), 0)), sum_churn:cum_churn)

【讨论】:

    猜你喜欢
    • 2021-07-02
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 2012-06-17
    • 2020-11-19
    • 2021-10-15
    相关资源
    最近更新 更多