我正在开发一个函数,该函数在数据表上返回统计摘要。我想将分位数添加到失败的输出中。有想法吗?
tr <-data.table(industry=as.factor(c("a","a","a","b","b","b")),
country=c("ch","gb", "us", "gb", "us", "us"), rat1=rnorm(100), rat2=rnorm(100))
SummaryStat <- function(tab.ratios, IDs, q.increment=0.05){
tab.ratios <- melt(tab.ratios, id.vars = IDs)[variable %like% "rat"]
output <- lapply(IDs, function(index){
tab.ratios[, .(N=.N, NMISS=sum(is.na(value)), missing.perc=100 * sum(is.na(value)) / .N,
special.perc=100 * sum(value==1 | value==-1 | value==1000 | value == -1000) / .N,
zero.perc=100 * sum(value==0) / .N,
mean=mean(as.double(value), na.rm=TRUE), median=median(as.double(value), na.rm=TRUE),
var=var(value, na.rm=TRUE), SD=sqrt(var(value, na.rm=TRUE)),
min=min(value, na.rm=TRUE), max=max(value, na.rm=TRUE)),
by=c("variable", index)]
})
names(output) <- IDs
return(output)
}
SummaryStat(tr, c("industry", "country"))
如何将分位数添加到要返回的表中?
答案 0 :(得分:0)
首先,我认为您需要更新示例,因为“ x_fin_rat”作为data.table
中的一列不存在。因此,我仅对%like%
参数使用“ rat1”,以使用提供的数据集测试您的功能。无论您遇到什么错误,因为quantile
的值都是一个命名的数字矢量。因此,我认为不可能将其与您的单身人数统计信息简单地相加。我要做的只是分别计算分位数,然后以data.table
方式合并它们。因此,这就是在您的函数中添加的代码:
SummaryStat <- function(tab.ratios, IDs, q.increment=0.05){
tab.ratios <- melt(tab.ratios, id.vars = IDs)[variable %like% "x_fin_rat_"]
output <- lapply(IDs, function(index){
tab.ratios[, .(N=.N, NMISS=sum(is.na(value)), missing.perc=100 * sum(is.na(value)) / .N,
special.perc=100 * sum(value==1 | value==-1 | value==1000 | value == -1000) / .N,
zero.perc=100 * sum(value==0) / .N,
mean=mean(as.double(value), na.rm=TRUE), median=median(as.double(value), na.rm=TRUE),
var=var(value, na.rm=TRUE), SD=sqrt(var(value, na.rm=TRUE)),
min=min(value, na.rm=TRUE), max=max(value, na.rm=TRUE)),
by=c("variable", index)][tab.ratios[,data.table(t(quantile(value,na.rm=T))),by=c("variable",index)],on=c("variable",index)]
})
names(output) <- IDs
return(output)
}
请注意,您需要首先转置quantile
值以将其转换为行向量,然后将该结果转换为data.table
以便进行合并。希望对您有所帮助,如果还有其他问题,请告诉我。祝你好运!