I have a data frame:
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
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).
Desired output:
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.
And another alternative (though this is mostly a pretty version of
sweep
)...prop.table
:From the "description" section of the help file at
?prop.table
:So, you can see that underneath, this is really quite similar to @Jilber's solution.
And... it's nice for the R developers to be considerate of us newbies, isn't it? :)
Another alternative using
sweep
following should do the trick
The function
adorn_percentages()
from the janitor package does this:This is equivalent to
x %>% adorn_percentages(denominator = "row")
, though"row"
is the default argument so is not needed in this case. An equivalent call isadorn_percentages(x)
if you prefer it without the%>%
pipe.Disclaimer: I created the janitor package, but feel it's appropriate to post this; the function was built to perform exactly this task while making code clearer to read, and the package can be installed from CRAN.