繁体   English   中英

在 R 中应用逐行转换,以便每行的总百分比为 100%

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM