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)
您可以同时将和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)
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |