我是 R 初学者,我需要能够计算数据框中值的百分比,但经常按其他列值“分组”。
我有一个大约 1000 行的数据框,包含媒体类型、版本、集合(=年份)和计数(今年)。我可以过滤它们,只获取特定的媒体:
trSpdf <- trS[trS$Mediatype == 'application/pdf',]
并获得以下示例性输出:
> trSpdf
Mediatype Version Collection Count
39 application/pdf -1 co2008 2.0
40 application/pdf -1 co2009 5.0
43 application/pdf 1 co2008 1.0
44 application/pdf 1 co2009 1.0
48 application/pdf 1.1 co2008 16.0
52 application/pdf 1.2 co2008 20.0
53 application/pdf 1.2 co2009 90.0
... (continuing) ...
我想要的是计算每个集合(=年份)的每个版本与该集合中的所有版本相比的百分比,因此对于本示例,结果应该是:
5.12% of all versions in co2008 were version -1 (2.0 / total sum for co2008)
2.56% of all versions in co2008 were version 1 (1.0 / total sum for co2008)
...
93,75% of all versions in co2009 were version 1.2 (90.0 / total sum for co2009)
...
预先感谢您提供有关如何解决此问题的任何答案。
首先,使用ave
添加一列,给出每个的总计数Mediatype
and Collection
:
trS <- transform(trS, Tot.Count = ave(Count, Mediatype, Collection, FUN = sum))
然后,如何计算百分比就很简单了:
trS <- transform(trS, percentage = 100 * Count/Tot.Count)
或者,如果您希望其格式良好(例如“5.13%”),则使用sprintf
:
trS <- transform(trS, percentage = paste0(sprintf("%.2f", 100 * Count/Tot.Count),
"%"))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)