r - 在分类数据中查找百分比
问题描述
我想计算分类数据的百分比。
我有以下数据集。
library(tidyverse)
tib <- tibble(a = c("yes", "yes", "yes", "yes"),
b = c("yes", "yes", "no", "yes"),
c = c("AB", "yes", "AC", "no"),
d = c("AC", "yes", "no", "AB"),
) space = c("UP", "DO", "UP", "TA")
我想找到按空间分组的每个 a、b、c、d 列的百分比。
因此,例如,如果我们想查看“a”:
df_perc <- as.data.frame(prop.table(table(tib$space, tib$a)) * 100)
这使:
Var1 Var2 Freq
1 DO yes 25
2 TA yes 25
3 UP yes 50
哪个是对的。
现在,为了不对每一列都这样做,我正在尝试使用收集:
df_tidy <- tib %>%
gather(key="let", value="response", -"space")
但我必须以某种方式按“空间”分组。
并做这样的事情:
df_perc <- as.data.frame(prop.table(table(df_tidy$let, df_tidy$response)) * 100)
解决方案
这个怎么样:
tib %>% pivot_longer(-space, names_to = "vars", values_to="vals") %>%
group_by(space, vars, vals) %>% count() %>%
ungroup %>%
group_by(vars) %>%
mutate(pct = (n/sum(n))*100) %>%
select(-n) %>%
pivot_wider(names_from="vars", values_from="pct", values_fill=0)
# # A tibble: 8 x 6
# space vals a b c d
# <chr> <chr> <dbl> <dbl> <dbl> <dbl>
# 1 DO yes 25 25 25 25
# 2 TA yes 25 25 0 0
# 3 TA no 0 0 25 0
# 4 TA AB 0 0 0 25
# 5 UP yes 50 25 0 0
# 6 UP no 0 25 0 25
# 7 UP AB 0 0 25 0
# 8 UP AC 0 0 25 25
推荐阅读
- javascript - 只需单击一个按钮即可保存所有数据
- php - 从 stdClass 对象获取值不起作用
- c++ - C++20 概念:int not swappable_with int
- svn - SVN更改WC url,本地文件不变
- linux - systemd - 如何从系统服务访问当前用户名?
- .net - 为什么 DestinationFiles 和 SourceFiles 引用不同数量的项目?
- php - PHP电子表格在浏览器中下载xlsx
- azure - 从其中一张表中查询和排序数据 (Azure Log Analytics)
- verilog - 非法引用的 JK_FF 计数器错误
- python-3.x - 我想在水平循环中回答 tkinter 中的期望空间数