[英]Apply row-wise transformation in R so that total percentage for each row will be 100%
我有一个这样的数据框:
df <- structure(list(groups= c("group1", "group2", "group3", "group4"),
A = c(28.6, 26.7, 29.1,23.1,1.0),
B = c(24.5, 22.3,23.9,20.2,1.5),
C = c(12.1,11.2,12.1,11.7,1.5),
D = c(9.4,7.0,9.0,8.7,1.1)),
class = "data.frame",
row.names = c("1","2","3","4"))
groups A B C D
1 group1 28.6 24.5 12.1 9.4
2 group2 26.7 22.3 11.2 7.0
3 group3 29.1 23.9 12.1 9.0
4 group4 23.1 20.2 11.7 8.7
dataframe 中的值以百分比表示。 我想将每一行的总百分比增加到 100%。 所以 output 看起来像这样(顺便说一句,我手动计算了预期的 output,所以它可能不像计算机计算的那么准确):
groups A B C D
1 group1 38.3 32.8 16.2 12.6
2 group2 39.7 33.1 16.7 10.4
3 group3 39.7 32.6 16.4 11.3
4 group4 36.3 31.5 18.9 13.3
我应该怎么做? 谢谢!
您可以使用proportions
来获得百分比。
proportions(as.matrix(df[1:4,-1]), 1) * 100
# A B C D
#1 38.33780 32.84182 16.21984 12.60054
#2 39.73214 33.18452 16.66667 10.41667
#3 39.27126 32.25371 16.32928 12.14575
#4 36.26374 31.71115 18.36735 13.65777
如果您想在 dplyr 上下文中执行此操作:
df %>%
rowwise() %>%
mutate(sm = sum(c_across(-groups))) %>%
mutate(across(A:D, function(x)x/sm)*100) %>%
select(-sm)
## A tibble: 5 x 5
## Rowwise:
# groups A B C D
# <chr> <dbl> <dbl> <dbl> <dbl>
#1 group1 38.3 32.8 16.2 12.6
#2 group2 39.7 33.2 16.7 10.4
#3 group3 39.3 32.3 16.3 12.1
#4 group4 36.3 31.7 18.4 13.7
#5 group5 19.6 29.4 29.4 21.6
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.