由于效率问题,我试图用vapply替换我的for循环。我有1列(x),其值为我想要ID的四分位数。然后将其粘贴到另一列中。最初我的for循环是......
for (i in 1:length(x)){
if(x[i]> quantile(x,.75,na.rm=TRUE)) {
y[i]="Q4"
} else if (x[i]> quantile(x,.5,na.rm=TRUE)){
y[i]="Q3"
} else if (x[i]> quantile(x,.25,na.rm=TRUE)){
y[i]="Q2"
} else if (x[i]>=0) {
y[i] = "Q1"
} else (y[i]="")
}
这很棒!但我读了一篇文章,讨论了如何更有效地查看。所以,我玩了一遍并尝试了代码...
vapply(quantiletable, function(x,y)
if(x> quantile(x,.75,na.rm=TRUE)) {
y="Q4"
} else if (x> quantile(x,.5,na.rm=TRUE)){
y="Q3"
} else if (x> quantile(x,.25,na.rm=TRUE)){
y="Q2"
} else if (x>=0) {
y = "Q1"
} else (y="")
,rep(0,2))
这是我第一次尝试vapply,所以我确定我错过了某些东西/不允许做某事。
我得到的错误是...... 警告信息:
In FUN(X[[i]]) : argument length is > 1 and only the first element will be used (4 times)
Error: values must be length 2, but FUN(X[[1]]) result is length 1
非常感谢任何帮助!