小编La *_*ale的帖子

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)
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)

r cumulative-sum dplyr

5
推荐指数
1
解决办法
3043
查看次数

r:有条件地替换列子集中的值

我有一个像这样的数据帧:

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)

谢谢!一个.

conditional replace r

4
推荐指数
1
解决办法
3589
查看次数

无法使用粘贴功能 (R) 设置小数点后的位数

我试图将小数点后的位数设置为 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)

谢谢你。

r decimal paste

4
推荐指数
2
解决办法
4313
查看次数

R:在数据框中附加列,频率计数基于两列

我有一个这样的数据集:

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)

有没有一个班轮可以做到这一点?我环顾四周,但似乎没有找到答案。谢谢

r data-structures dplyr

2
推荐指数
1
解决办法
1662
查看次数

r:将字符串转换为日期

我有一个这样的字符串:

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之间添加一个短划线?谢谢

r as.date

-6
推荐指数
1
解决办法
1083
查看次数