R 中间间隔百分位数,数据表由多个列组织

R 中间间隔百分位数,数据表由多个列组织,r,data.table,R,Data.table,我有一个数据集,我想计算中间间隔百分位数(我从jlhoward那里得到了基本代码)。现在我尝试为使用(by)的组添加一个条件。虽然它只适用于一个条件,但当我添加两个条件时,它不起作用。 问题似乎出在by上 rm(list=ls()) 库(数据表) 我认为这可能是一个更好的思考方式 DT[ , rank := rank(SCORE,ties.method="min"), by=list(GROUP,TOPIC)] DT[ , ties := .N, by=list(GROUP,TOPIC,SCOR

我有一个数据集,我想计算中间间隔百分位数(我从jlhoward那里得到了基本代码)。现在我尝试为使用(by)的组添加一个条件。虽然它只适用于一个条件,但当我添加两个条件时,它不起作用。 问题似乎出在by上

rm(list=ls())
库(数据表)

我认为这可能是一个更好的思考方式

DT[ , rank := rank(SCORE,ties.method="min"), by=list(GROUP,TOPIC)]
DT[ , ties := .N, by=list(GROUP,TOPIC,SCORE)]
DT[ , total :=.N, by=list(GROUP,TOPIC)]
DT[ , ptile := (ties*0.5+(rank-1))/total]
DT[ , ptile := round(ptile,2)]

我现在不在R-console前,但您不能为此使用
ecdf
功能吗?也许这是一个愚蠢的建议,
DT[,ptile:=1-ecdf(SCORE)(SCORE),by=list(GROUP,TOPIC)]
?您的方法似乎对订购很敏感。例如(本例中此方法有效)ptile.mt Hi Mike,不,不幸的是ecdf不起作用。有两个问题(1.在代码中粘贴时,我在尝试将Math.data.frame(列表)中的错误添加回数据表时出错(ID=c(43574,…数据框中的非数字变量:TOPIC)和2.数据不正确(如上面的问题)。您能更具体地说明您的意思吗“看来你的方法对订购很敏感。”?谢谢。你的回答很可读,很容易理解,最重要的是它完全符合我的要求!
DT[ , rank := rank(SCORE,ties.method="min"), by=list(GROUP,TOPIC)]
DT[ , ties := .N, by=list(GROUP,TOPIC,SCORE)]
DT[ , total :=.N, by=list(GROUP,TOPIC)]
DT[ , ptile := (ties*0.5+(rank-1))/total]
DT[ , ptile := round(ptile,2)]