计算按行比例 [英] Calculate row-wise proportions
问题描述
我有一个数据框:
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).
Within each row, I want to calculate the corresponding proportions (ratio) for each value. E.g. for the value in column "val0", I want to calculate row-wise 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
谁能告诉我这样做的最佳方法是什么?这里只有三列,但可能有很多列.
Can anyone tell me what's the best way to do this? Here it's just three columns, but there can be alot of columns.
推荐答案
还有另一种选择(虽然这主要是 sweep
的一个漂亮版本)... prop.table
:
And another alternative (though this is mostly a pretty version of sweep
)... prop.table
:
> cbind(x[1], prop.table(as.matrix(x[-1]), margin = 1))
id val0 val1 val2
1 a 0.08333333 0.3333333 0.5833333
2 b 0.13333333 0.3333333 0.5333333
3 c 0.16666667 0.3333333 0.5000000
来自 ?prop.table
帮助文件的描述"部分:
From the "description" section of the help file at ?prop.table
:
对于新手来说这真的是 sweep(x, margin, margin.table(x, margin), "/")
,除了如果 margin 的长度为零,那么一个得到 x/sum(x).
This is really
sweep(x, margin, margin.table(x, margin), "/")
for newbies, except that if margin has length zero, then one gets x/sum(x).
所以,你可以在下面看到,这与@Jilber 的解决方案非常相似.
So, you can see that underneath, this is really quite similar to @Jilber's solution.
而且……对于 R 开发人员来说,体谅我们这些新手很好,不是吗?:)
And... it's nice for the R developers to be considerate of us newbies, isn't it? :)
这篇关于计算按行比例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!