4
我寫了一段代碼來計算感興趣變量的累積值(通過十分位數)。 我的數據看起來像這樣:r:在計算累積值時用NA替換爲0
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.累計次數爲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'使這個可重現) – akrun
你的期望輸出是什麼? – Arun
是的,對不起。現在添加set.seed。 –