按R中的百分比对数据帧进行分类

按R中的百分比对数据帧进行分类,r,percentile,R,Percentile,我有以下资料: set.seed(15) ddf <- data.frame( gp1 = sample(1:3, 200, replace=T), gp2 = sample(c('a','b'), 200, replace=T), param = sample(10:20, 200, replace=T) ) head(ddf) gp1 gp2 param 1 2 a 18 2 1 b 11 3 3 a 15 4

我有以下资料:

set.seed(15)
ddf <- data.frame(
    gp1 = sample(1:3, 200, replace=T), 
    gp2 = sample(c('a','b'), 200, replace=T), 
    param = sample(10:20, 200, replace=T) 
)
head(ddf)
  gp1 gp2 param
1   2   a    18
2   1   b    11
3   3   a    15
4   2   b    20
5   2   a    17
6   3   b    11
上述代码是否正确,或者如何做到这一点?感谢您的帮助。

(将“值”更改为“参数”后)

ddf=data.frame(gp1、gp2、param)
ddf$类别分位数(x,.95)))
>ddf
gp1 gp2参数类别
1 2 a 20 0
2 a 16 0
31A120
41B160
5 3 b 19 0
剪断
>金额(ddf$类别)
[1] 2

谢谢您的回答。我发现它的输出与我的代码的输出不同。我的代码一定是错误的,但是错误在哪里?我还可以安全地将na.rm=TRUE添加到您的代码中吗?最后,为什么您的代码生成0和1值而不是TRUE和FALSE?@rnso您可以将
用作.logical
!!大道(..
@akrun:So ave给出数值输出。@BondedDust:我们可以用第75个百分位数来表示更多的值1。你当然可以在分位数参数中使用
na.rm=TRUE
。我不理解关于它是数值的问题,因为这是你要求的。是的,当你降低阈值时,1的数量会增加e、 这里可以使用ecdf()(或Hmisc的ecdf())吗?可能不可以。
ecdf
quantile
是彼此相反的。
ddf$category = with(ddf, ifelse(param>quantile(ddf[ddf$gp1==gp1 & ddf$gp2==gp2,]$param, .75, na.rm=T), 1, 0)  )
ddf = data.frame(gp1, gp2, param)
ddf$category <- with(ddf, ave(param, gp1,gp2, 
                             FUN=function(x) x > quantile(x,.95) ) )
> ddf
    gp1 gp2 param category
1     2   a    20        0
2     2   a    16        0
3     1   a    12        0
4     1   b    16        0
5     3   b    19        0
 snipped

> sum(ddf$category)
[1] 2