我想在=
中使用j
从给定函数创建多个变量
例如,来自data.table
DT=data.table(id=sample(10,100),v=runif(100))
我想创建
# id p20 p80
# 1 0.12 0.92
# 2 0.02 0.83
现在,我做
DT[,list(p20=quantile(v,0.20),p80=quantile(v,0.80),by=id]
答案 0 :(得分:1)
我不知道你问的问题是否可以直接完成。这是另一种选择 - 围绕它编写一个函数 - (这是我的快速和简单的代码,可以给你一个想法)
DT <- data.table(id=sample(10,100,replace=T),v=runif(100))
test <- function(pctls) {
str <- "mean=mean(v)"
for(i in pctls) {
str<- paste(str,",p",i,"=quantile(v,",i/100,")",sep="")
}
str <- paste("DT[,list(",str,"), by=id]",sep ="")
eval(parse(text=str))
}
test(c(10,20,30))
id mean p10 p20 p30
1: 1 0.3654006 0.04174424 0.05564887 0.13246705
2: 2 0.3593194 0.07331625 0.09034995 0.09058092
3: 3 0.5071105 0.23652298 0.38699917 0.46832168
4: 4 0.4399384 0.01624399 0.21743962 0.30668150
5: 5 0.7163586 0.42516997 0.55865925 0.61741287
6: 6 0.4773865 0.21349738 0.29869525 0.35726233
7: 7 0.4433606 0.06423671 0.09839058 0.24951293
8: 8 0.5774145 0.09875137 0.17900887 0.44749030
9: 9 0.3980907 0.08683772 0.10629176 0.13377076
10: 10 0.5075917 0.18238568 0.28410222 0.39008093
答案 1 :(得分:1)
你可以尝试&#34; listify&#34;结果。类似的东西:
DT[, as.list(quantile(v, c(0.2, 0.8))), by = id]
如果要重命名新列:
setnames(DT, c("id", paste0("q", c(0.2, 0.8)))