【发布时间】:2015-10-28 10:15:25
【问题描述】:
此问题与How can I replace a factor levels with the top n levels (by some metric), plus [other]? 有关。作为一个指标,我想使用该因素的出现次数。我知道我可以通过列出事件列表来做到这一点,但我想知道是否有更漂亮的方法。
例子:
library(data.table);
library(plyr);
fac <- data.table(score = as.factor(c(3,4,5,3,3,3,5)));
ocCnt <- data.table(lapply(fac,count)$score);
fac$occurrence <- 0;
for(i in 1:length(fac$score)){fac$occurrence[i]<-ocCnt[x==fac$score[i]]$freq};
然后我可以使用引用的问题/答案中描述的功能:
hotfactor= function(fac,by,n=10,o="other") {
levels(fac)[rank(-xtabs(by~fac))[levels(fac)]>n] <- o
fac
}
继续这个例子,如果我们只想查看我们所做的最流行的因素:
hotfactor(fac$score,fac$occurrence,1);
要得到答案:
[1] 3 其他 3 3 3 其他
级别:其他 3 级
所以我的问题是,我可以在不添加计算出现次数的列表的情况下执行此操作吗?
请注意,我想对 n 个最流行的因素(不仅仅是最流行的因素)执行此操作。
【问题讨论】:
标签: r