我有一个大数据框架(对 57 个变量的 +239k 观察),其中包含一些疾病描述和针对不同年龄段人群的这些疾病的药物。我想在每种疾病描述的使用频率最高的四分之一中找到这些药物。
为了制作一个可重复的示例,我创建了一个 1000 个观察数据框:
set.seed(1);sk<-as.factor(sample(c("sick A","sick B","sick C","sick D"),1000,replace=T));md<-as.factor(sample(c("med 1","med 2","med 3","med 4","med 5")));age<-as.factor(sample(c("group a","group b","group c"),1000,replace=T))
df<-data.frame(obs=1:1000,md=md,sk=sk,age=age)
我可以生成一个频率表
xt<-xtabs(~md+sk+age,df)
然后我可以为每个年龄组生成一个数据框
XTDF_a<-as.data.frame(xt[,,"group a"])
然后找到每种疾病频率的第三个四分位数:
Q3_a<-apply(XTDF_a,2,function(x) quantile(x,probs = .75))
我可以比较并获得每种疾病在第三四分位数以上的药物
XTDF_a>Q3_a
sk
md sick A sick B sick C sick D
med 1 FALSE FALSE TRUE FALSE
med 2 FALSE FALSE FALSE FALSE
med 3 TRUE TRUE FALSE FALSE
med 4 FALSE FALSE FALSE TRUE
med 5 FALSE FALSE FALSE FALSE
我可以得出结论,这med 3
是疾病 A 的最佳选择,依此类推(我正在循环提取该信息)。然后我返回并重复 b、c 组的过程......这对于我拥有的数据量来说几乎是不可能的(疾病大约是 4200 级,药物大约是 1150 级)。
我很确定应该有一种不同的、更简单的方法来实现这一点。我将不胜感激有关更好途径的提示。