我想按因子对数据框进行子集化。我只想保留高于特定频率的因子水平。
df <- data.frame(factor = c(rep("a",5),rep("b",5),rep("c",2)), variable = rnorm(12))
此代码创建数据框:
factor variable
1 a -1.55902013
2 a 0.22355431
3 a -1.52195456
4 a -0.32842689
5 a 0.85650212
6 b 0.00962240
7 b -0.06621508
8 b -1.41347823
9 b 0.08969098
10 b 1.31565582
11 c -1.26141417
12 c -0.33364069
我想降低重复次数少于 5 次的因子水平。我开发了一个 for 循环并且它正在工作:
for (i in 1:length(levels(df$factor))){
if(table(df$factor)[i] < 5){
df.new <- df[df$factor != names(table(df$factor))[i],]
}
}
但是否存在更快、更漂亮的解决方案呢?
require(dplyr)
df %>% group_by(factor) %>% filter(n() >= 5)
#factor variable
#1 a 2.0769363
#2 a 0.6187513
#3 a 0.2426108
#4 a -0.4279296
#5 a 0.2270024
#6 b -0.6839748
#7 b -0.3285610
#8 b 0.2625743
#9 b -0.9532957
#10 b 1.4526317
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)