gpt4 book ai didi

r - 计算多列的总计百分比

转载 作者:行者123 更新时间:2023-12-02 17:01:49 31 4
gpt4 key购买 nike

我在 R 中有一个数据框,其中有几列构成总计列,如下所示:

data <- data_frame(
Date = c("14/12/2018", "15/12/2018", "16/12/2018"),
Ent = c("C1", "C1", "C1"),
Ans = c(4, 9, 12),
Aban = c(1, 2, 1),
OOH = c(7, 5, 6),
Total = c(12, 16, 19),
)

输出如下:

Date       Ent     Ans  Aban   OOH Total
<chr> <chr> <dbl> <dbl> <dbl> <dbl>
14/12/2018 C1 4 1 7 12
15/12/2018 C1 9 2 5 16
16/12/2018 C1 12 1 6 19

我想做的是找到最有效的方法来计算每列对总数的贡献百分比。下面是我当前的解决方案,它需要三行单独的代码:

#Ans
data$AnsP <- (data$Ans / data$Total) * 100

#Aban
data$AbanP <- (data$Aban / data$Total) * 100

#OOH
data$OOHP <- (data$OOH / data$Total) * 100

但是,随着我预计源数据集会增长,这最终将成为多个变量的次优

有没有一种简单的方法可以在一行代码中计算这些百分比贡献,并将这些百分比作为现有数据框中的列返回?也许与 sapply 或功能?我做了一些粗略的尝试,但没有奏效

希望输出为数据框:

Date       Ent     Ans  Aban   OOH Total  AnsP AbanP  OOHP
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
14/12/2018 C1 4 1 7 12 33.3 8.33 58.3
15/12/2018 C1 9 2 5 16 56.2 12.5 31.2
16/12/2018 C1 12 1 6 19 63.2 5.26 31.6

如有任何帮助,我们将不胜感激

问候,汤姆

最佳答案

使用 dplyr

library(dplyr)

data %>%
mutate_at(vars(Ans:OOH) , funs(P = ./data$Total * 100))


# Date Ent Ans Aban OOH Total Ans_P Aban_P OOH_P
# <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 14/12/2018 C1 4 1 7 12 33.3 8.33 58.3
#2 15/12/2018 C1 9 2 5 16 56.2 12.5 31.2
#3 16/12/2018 C1 12 1 6 19 63.2 5.26 31.6

或者如果你更喜欢 base R

cols <- 3:5
cbind(data, data[cols]/data$Total * 100)

因为 Total 列与 cols 列的总和相同,我们也可以这样做

data[cols]/rowSums(data[cols]) * 100

关于r - 计算多列的总计百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53773789/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com