【发布时间】:2014-12-19 11:54:02
【问题描述】:
这可能有点晦涩难懂,因为我仍在学习 R,但我正在做一些数据框操作以提取有关分类组的某些百分比,这些百分比是由一个列捕获的,这是一个因素针对我希望从中获得百分比的另一列。我将使用内置的 mtcars 来演示我想要实现的目标,其中 gear 扮演分类变量的角色,而 cyl 是我试图从中获取百分比的数据。
只是一些背景细节来解决问题:
gear 列跨越 3 个不同的值,3,4,5。
cyl 列也包含 3 个不同的值,4,6,8
我列表的第一个元素说明了最多有 4 个气缸的齿轮类型的百分比。对于 3 档车型,总共 15 款 3 档车型中只有一款丰田 Corona,因此百分比应为 1/15 = 0.0667。对于 4 齿轮模型,总共 12 个 4 齿轮模型中有 8 个,得出 8/12 = 0.667。
现在这是我编写的用于进行此计算的方法。但是输出的结构不是我想要的。相反,我想要将这一切合并到一个数据框中,第一列是不同的 cyl 值,其他列是齿轮类型的 3、4 和 5,其中行是各种百分比。我非常接近,但需要一些帮助来对我目前正在实现的列表进行数据重塑,或者甚至可以使用替代应用功能来实现我正在追求的百分比表,或者任何其他人可以做的魔法。
> lapply( unique( sort( y$cyl ) ) , function(c) { tapply( y$cyl , y$gear , function(x) sum( x <= c ) / length(x) ) } )
[[1]]
3 4 5
0.06666667 0.66666667 0.40000000
[[2]]
3 4 5
0.2 1.0 0.6
[[3]]
3 4 5
1 1 1
这就是我希望显示的数据框
cyl X3 X4 X5
1 4 0.06666667 0.6666667 0.4
2 6 0.20000000 1.0000000 0.6
3 8 1.00000000 1.0000000 1.0
【问题讨论】: