用dplyr计算因子变量的百分比
我试图计算dplyr中数据框中每个因子变量的百分比/计数,有点像使用表格,虽然我可以手动执行此操作,但如果我有许多因子变量或因子变量具有这种情况,这会变得单调乏味许多级别。
例:
set.seed(100)
data <- data.frame(groupbyvar = LETTERS[1:4],
var1 = letters[1:4],
var2 = as.factor(sample(1:4,12,TRUE)))
data %>% group_by(groupbyvar) %>% summarise(var1_a = mean(var1 == 'a', na.rm=TRUE),
var1_b = mean(var1 == 'b', na.rm=TRUE),
var1_c = mean(var1 == 'c', na.rm=TRUE),
var1_d = mean(var1 == 'd', na.rm=TRUE),
var1_1 = mean(var2 == 1, na.rm=TRUE),
var1_2 = mean(var2 == 2, na.rm=TRUE),
var1_3 = mean(var2 == 3, na.rm=TRUE),
var1_4 = mean(var2 == 4, na.rm=TRUE))
我想过使用表格,但这不会产生dplyr可以理解的输出。 另外,我考虑使用类似model.matrix的东西在传递数据框之前在因子变量上生成指标,但这会不必要地增加内存占用(尤其是大数据集)。 有没有简单的方法来实现这一点?
结果应该是具有百分比/计数的新数据框:
groupbyvar var1_a var1_b var1_c var1_d var1_1 var1_2 var1_3 var1_4
1 A 1 0 0 0 0.0000000 0.6666667 0.3333333 0.0000000
2 B 0 1 0 0 0.3333333 0.6666667 0.0000000 0.0000000
3 C 0 0 1 0 0.0000000 0.0000000 0.6666667 0.3333333
4 D 0 0 0 1 0.3333333 0.3333333 0.0000000 0.3333333
我希望它能够自动化每个列名称的后缀,类似于model.matrix对因子变量的作用。
这绝对是过于复杂,但我确实认为tables
会做你可能想要的。
您的数据
set.seed(100)
data <- data.frame(groupbyvar = LETTERS[1:4],
var1 = letters[1:4],
var2 = as.factor(sample(1:4,12,TRUE)))
然后我们把它tabular
。
mytab<-tabular( (Factor(groupbyvar, "Group") + 1)*(
(ColPct=Percent("col")))
~ (Factor(var1, "var1")
+ Factor(var2, "var2") +
1)
*Format(digits=1), data=data )
这给了我myTab
var1 var2
Group a b c d 1 2 3 4 All
A ColPct 100 0 0 0 0 40 33 0 25
B ColPct 0 100 0 0 50 40 0 0 25
C ColPct 0 0 100 0 0 0 67 50 25
D ColPct 0 0 0 100 50 20 0 50 25
All ColPct 100 100 100 100 100 100 100 100 100
然后从myTab中提取数据(例如class(table(myTab))
是table。但这真的很痛苦。
上一篇: Calculating percentages of a factor variable with dplyr