我编写了一段代码来计算十分位数的感兴趣变量的累积值.我的数据看起来像这样:
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)
Run Code Online (Sandbox Code Playgroud)
这是构建表并计算累积值的代码.
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')
Run Code Online (Sandbox Code Playgroud)
"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 …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的数据帧:
sport contract start contract end visits spends purchases
basket 2013-10-01 2014-10-01 12 14 23
basket 2014-02-12 2015-03-03 23 11 7
football 2015-02-12 2016-03-03 23 11 7
basket 2016-07-17 2013-09-09 12 7 13
Run Code Online (Sandbox Code Playgroud)
我想根据变量"sport"和"contract start"有条件地用NAs替换列[4:6].例如:
i1 <- which(df$sport =="basket" & df$contract_start>="2014-01-01")
Run Code Online (Sandbox Code Playgroud)
将索引满足条件的所有行.是否有一段简单的代码可以添加到上面,在给定上述条件的情况下,将用NAs代替df [4:6]?我想最终得到类似的东西:
sport contract start contract end visits spends purchases
basket 2013-10-01 2014-10-01 12 14 23
basket 2014-02-12 2015-03-03 NA NA NA
football 2015-02-12 2016-03-03 23 11 7
basket 2016-07-17 2013-09-09 NA NA NA
Run Code Online (Sandbox Code Playgroud)
谢谢!一个.
我试图将小数点后的位数设置为 1。我已经完成了这个计算:
options(digits = 3)
DT<-data.table(x=c("a","b","c",NA,"b","e"),v=rnorm(6))
ans<-DT[,lapply(.SD,function(x) length(which(is.na(x)))/length(x)*100)]
Run Code Online (Sandbox Code Playgroud)
现在, ans 给我列中 NA 的百分比:
x v
16.7 0
Run Code Online (Sandbox Code Playgroud)
但是当我尝试添加百分比符号“%”时:
ans[,lapply(.SD, function(x) paste(x,"%",sep = ''))]
Run Code Online (Sandbox Code Playgroud)
十进制数字又回到了那里:
x v
1: 16.6666666666667% 0%
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我怎样才能得到这个输出?:
x v
16.7% 0%
Run Code Online (Sandbox Code Playgroud)
谢谢你。
我有一个这样的数据集:
name height
John 188
John 190
Jack 182
Jack 174
Jack 174
Run Code Online (Sandbox Code Playgroud)
我需要附加一列,其中包含基于(名称)和(高度)的频率计数,而不修改数据集的结构,例如:
name height occurrence
John 188 1
John 190 1
Jack 182 1
Jack 174 2
Jack 174 2
Run Code Online (Sandbox Code Playgroud)
有没有一个班轮可以做到这一点?我环顾四周,但似乎没有找到答案。谢谢
我有一个这样的字符串:
201601
201603
201604
201606
201501
Run Code Online (Sandbox Code Playgroud)
我想转换为Date,就像这样:
2016-01
2016-03
2016-04
2016-06
2015-01
Run Code Online (Sandbox Code Playgroud)
我试过了:df$month_key=as.Date(df$month_key,format="YYYYmm")
但它要求原点,我们不需要关心它.有没有办法做到这一点,或者可能在整个列中的字符4和5之间添加一个短划线?谢谢