根据特定列计算百分比

cho*_*oij 4 r dataframe dplyr tidyverse

我想知道每一行如何计算取决于列的百分比?

这是虚拟数据集:

c <- c(10, 20, 30, 40, 50)
b <- c(40, 2, 40, 10, 50)
a <- c(100, 50, 70, 60, 100)
id <- c("a", "b", "c", "d", "e")

data <- data.frame(id, a, b, c)
head(data)
#   id   a  b  c
# 1  a 100 40 10
# 2  b  50  2 20
# 3  c  70 40 30
# 4  d  60 10 40
# 5  e 100 50 50
Run Code Online (Sandbox Code Playgroud)

对于每一行,我们如何将“a”列设置为 100%,并取决于 b 列和 c 列的计算比例?

这是预期的输出:

#    id   a  b  c proportion_b proportion_c
# 1  a 100 40 10            40           10
# 2  b  50  2 20             4           40
# 3  c  70 40 30      57.14286     42.85714
# 4  d  60 10 40      16.66667     66.66667
# 5  e 100 50 50            50           50
Run Code Online (Sandbox Code Playgroud)

如果其可能的tidyverse方法更优选。谢谢。

akr*_*run 11

使用base R

nm1 <- c("b", "c")
data[paste0("proportion_", nm1)] <- data[nm1]/data$a * 100
Run Code Online (Sandbox Code Playgroud)

-输出

> data
  id   a  b  c proportion_b proportion_c
1  a 100 40 10     40.00000     10.00000
2  b  50  2 20      4.00000     40.00000
3  c  70 40 30     57.14286     42.85714
4  d  60 10 40     16.66667     66.66667
5  e 100 50 50     50.00000     50.00000
Run Code Online (Sandbox Code Playgroud)


Dar*_*sai 8

您可以同时将和a分为:bcacross()

library(dplyr)

data %>%
  mutate(across(b:c, ~ .x / a * 100, .names = "proportion_{.col}"))

#   id   a  b  c proportion_b proportion_c
# 1  a 100 40 10     40.00000     10.00000
# 2  b  50  2 20      4.00000     40.00000
# 3  c  70 40 30     57.14286     42.85714
# 4  d  60 10 40     16.66667     66.66667
# 5  e 100 50 50     50.00000     50.00000
Run Code Online (Sandbox Code Playgroud)