gpt4 book ai didi

r - 用比例(百分比)扩展列联表

转载 作者:行者123 更新时间:2023-12-03 09:01:05 35 4
gpt4 key购买 nike

我有一个计数列联表,我想用每个组的相应比例对其进行扩展。
一些示例数据(来自 tips 包的 ggplot2 数据集):

library(ggplot2)

head(tips, 3)
# total_bill tip sex smoker day time size
# 1 17 1.0 Female No Sun Dinner 2
# 2 10 1.7 Male No Sun Dinner 3
# 3 21 3.5 Male No Sun Dinner 3
首先,使用 table计算吸烟者与非吸烟者的数量,以及 nrow计算科目总数:
table(tips$smoker)
# No Yes
# 151 93

nrow(tips)
# [1] 244
然后,我想计算吸烟者与非吸烟者的百分比。像这样(丑陋的代码):
# percentage of smokers
options(digits = 2)

transform(as.data.frame(table(tips$smoker)), percentage_column = Freq / nrow(tips) * 100)
# Var1 Freq percentage_column
# 1 No 151 62
# 2 Yes 93 38
有一个更好的方法吗?
(更好的是在一组列(我列举的)上执行此操作并且输出的格式有些好)
(例如,吸烟者、日期和时间)

最佳答案

如果您追求简洁,您可能会喜欢:

prop.table(table(tips$smoker))

然后根据需要按 100 和四舍五入进行缩放。或者更像您的确切输出:
tbl <- table(tips$smoker)
cbind(tbl,prop.table(tbl))

如果您想对多列执行此操作,根据您的喜好,您可以选择许多不同的方向来获得干净的输出,但这里有一个选项:
tblFun <- function(x){
tbl <- table(x)
res <- cbind(tbl,round(prop.table(tbl)*100,2))
colnames(res) <- c('Count','Percentage')
res
}

do.call(rbind,lapply(tips[3:6],tblFun))
Count Percentage
Female 87 35.66
Male 157 64.34
No 151 61.89
Yes 93 38.11
Fri 19 7.79
Sat 87 35.66
Sun 76 31.15
Thur 62 25.41
Dinner 176 72.13
Lunch 68 27.87

如果你不喜欢把不同的 table 叠在一起,你可以放弃 do.call并将它们留在列表中。

关于r - 用比例(百分比)扩展列联表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9623763/

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