R语言 tidyverse系列学习笔记(系列4)PlantGrowth - percentage table

news/2024/12/29 16:16:42/

本篇学习数据分析, Excel 表格制作

Task: 创建一个 行 百分比 表格

在这里插入图片描述

row percentage table

先看一下 PlantGrowth 数据集

library(dplyr)data("PlantGrowth")
view(PlantGrowth)

在这里插入图片描述
给数据集新加一列 weight_cat ,并用 case_when 自定义名称

PG = PlantGrowth |> mutate(weight_cat = case_when(weight <= 4.5 ~ "light",weight > 4.5 & weight <= 5.5 ~ "medium",weight > 5.5 ~ "heavy"))view(PG)

在这里插入图片描述

统计 group 和 weight_cat 的次数

table(PG$group, PG$weight_cat)table_count1 = table(PG$group,PG$weight_cat)
view(table_count1)

在这里插入图片描述

在这里插入图片描述

addmargins

addmargins(table_count1, 1) # 在最后一行加
addmargins(table_count1, 2) # 在最后一列加
addmargins(table_count1) # 在最后一行和最后一列都加

在这里插入图片描述

创建 行 百分比 表格

即每行加起来为100%,但每列加起来不一定是100%

# row percentage table
table_count2 = addmargins(table_count1, 1)
table_count2

在这里插入图片描述

proportion 比例
prop.table(x,1) 按计算百分比
prop.table(x,2) 按计算百分比

在这里插入图片描述
*100 转换成百分制

最后一列加sum

table_count3 = addmargins(table_count2,2)
table_count3table_per2 = addmargins(table_per1,2)
table_per2

在这里插入图片描述
在这里插入图片描述

可以看到每行 sum 都是100

paste0

在这里插入图片描述
如果直接把 countpercentage 拼接起来,结果有点奇怪,可以根据需求自定义修改
在这里插入图片描述

paste0(table_count3, "(", round(table_per2), "%)")

在这里插入图片描述
先用round去掉了小数点,再把百分比数值前边加上,再把百分比数值右边加上%

matrix

matrix(paste0(table_count3, "(", round(table_per2), "%)"),dim(table_count3))

将输出变成矩阵的形式,可以指定输出的 shape,用dimention来指定shape更方便

在这里插入图片描述

数据有了,我们还缺少行名和列名,下面介绍一个快捷方式

dimnames

先看例子

dimnames(table_count3)

先输出行名,在输出列名

在这里插入图片描述

加到我们需要的表格上

matrix(paste0(table_count3, "(", round(table_per2), "%)"),dim(table_count3),dimnames = dimnames(table_count3))

在这里插入图片描述
以上,我们就得到了需要的表格,现在将最后一条代码规整化并命名新的表名

tab_combine = matrix(paste0(table_count3, "(", round(table_per2), "%)"),dim(table_count3),dimnames = dimnames(table_count3))

完整代码

library(dplyr)data("PlantGrowth")
view(PlantGrowth)PG = PlantGrowth |> mutate(weight_cat = case_when(weight <= 4.5 ~ "light",weight > 4.5 & weight <= 5.5 ~ "medium",weight > 5.5 ~ "heavy"))view(PG)table_count1 = table(PG$group,PG$weight_cat)
table_count2 = addmargins(table_count1, 1)table_per1 = prop.table(table_count2,1)*100
table_count3 = addmargins(table_count2,2)
table_per2 = addmargins(table_per1,2)tab_combine = matrix(paste0(table_count3, "(", round(table_per2), "%)"),dim(table_count3),dimnames = dimnames(table_count3))

拓展任务:column percentage table & overall percentage table

column percentage table

tab_1 = table(PG$group,PG$weight_cat)
tab_2 = addmargins(tab_1,2)
tab_3 = addmargins(tab_2,1)tab_per1 = prop.table(tab_2,2)*100
tab_per2 = addmargins(tab_per1,1)tab_colmn_combine = matrix(paste0(tab_3, "(", round(tab_per2), "%)"),dim(tab_3),dimnames = dimnames(tab_3))tab_colmn_combine

在这里插入图片描述

overall percentage table

tab_1 = table(PG$group,PG$weight_cat)
tab_2 = addmargins(tab_1)tab_per1 = prop.table(tab_1)*100
tab_per2 = addmargins(tab_per1)tab_colmn_combine = matrix(paste0(tab_2, "(", round(tab_per2), "%)"),dim(tab_2),dimnames = dimnames(tab_2)
)tab_colmn_combine

在这里插入图片描述


http://www.ppmy.cn/news/362586.html

相关文章

centos7 网卡启动不了,修复方法

刚刚装好的虚拟机突然不能上网了&#xff0c;报错很诡异&#xff0c;具体报错如下&#xff1a; /etc/init.d/network restart Restarting network (via systemctl): Job for network.service failed because the control process exited with error code. See "systemctl…

Discovering versions from the identity service failed when creating the password plugin. Attempting

报错信息&#xff1a; [rootcontroller keystone]# openstack user show admin Discovering versions from the identity service failed when creating the password plugin. Attempting to determine version from URL. Unable to establish connection to http://controll…

(一)Open Stack(M)----基础环境搭建

感谢指剑大佬发表的博客与视频&#xff01;感谢所 爱大佬的支持&#xff01; Open Stack简介 1.虚拟机配置 一般都是要求每个节点都是4核4G&#xff0c;菜鸡我内存不足。 主机名配置网络controller4核4G192.168.100.10&#xff08;内网&#xff09;192.168.200.10&#xff…

第三方SSD问题引起电脑频繁重启问题IONVMeController.cpp:5499

电脑硬盘问题。一般第三方硬盘容易出这类问题。 固态硬盘接触不良&#xff0c;下固态硬盘&#xff0c;重新固定安装就好了。我的电脑一周出现两次这样的问题。出现这样的问题&#xff0c;可以换一个固态硬盘转接头&#xff0c;避免电脑来回移动震动电脑。 我的电脑是Macbook Ai…

基于springboot的学生选课系统

随着高校学生数量的不断增加&#xff0c;教务系统的数据量也不断增加。以前的选课方法是人工统计。这种方法虽然简单直接&#xff0c;但是造成教务处处理数据的繁重性和学生选课的盲目性。为了方便教务处的工作&#xff0c;以及每个学生能够更好的选择自己所喜欢的课程。针对学…

301、302、303、307状态码的区别

301永久重定向 302临时重定向&#xff0c;HTTP1.0的状态码&#xff0c;HTTP1.1也有保留。 如果client向server发送post请求。 server返回URL和302。 如果用户确认&#xff0c;client发送post请求。&#xff08;但实际情况是&#xff0c;很多浏览器都不问问用户&#xff0c;…

Starting network (via systemctl): Job for network.service failed because the control process exited

在构建KVM网络时遇到如下报错刚刚装好的虚拟机突然不能上网了&#xff0c;报错很诡异&#xff0c;具体报错如下&#xff1a; /etc/init.d/network restart Restarting network (via systemctl): Job for network.service failed because the control process exited with error…

ens33网卡没有IP地址的解决方案

刚刚装好的虚拟机突然不能上网了&#xff0c;报错很诡异&#xff0c;具体报错如下&#xff1a; /etc/init.d/network restart Restarting network (via systemctl): Job for network.service failed because the control process exited with error code. See "systemc…