我有一个数据框:
x <- data.frame(id = letters[1:3], val0 = 1:3, val1 = 4:6, val2 = 7:9)
# id val0 val1 val2
# 1 a 1 4 7
# 2 b 2 5 8
# 3 c 3 6 9
在每行中,我想计算每个值的相应比例(比率) . 例如 . 对于列“val0”中的值,我想计算行方式val0 /(val0 val1 val2) .
期望的输出:
id val0 val1 val2
1 a 0.083 0.33 0.583
2 b 0.133 0.33 0.533
3 c 0.167 0.33 0.5
任何人都可以告诉我这是最好的方法吗?这里只有三列,但可能有很多列 .
4 回答
另一种选择(尽管这主要是
sweep
的漂亮版本)...prop.table
:来自
?prop.table
帮助文件的"description"部分:所以,你可以看到底层,这与@Jilber的解决方案非常相似 .
而且...... R开发人员很好地考虑我们的新手,不是吗? :)
以下应该做的伎俩
使用
sweep
的另一种选择来自janitor包的函数
adorn_percentages()
执行此操作:这相当于
x %>% adorn_percentages(denominator = "row")
,但"row"
是默认参数,因此在这种情况下不需要 . 如果您不使用%>%
管道,则等效调用为adorn_percentages(x)
.免责声明:我创建了看门人包,但觉得发布这个是合适的;该函数的构建是为了完成这项任务,同时使代码更清晰,并且可以从CRAN安装软件包 .