这是我的数据框
# Load libraries
library(data.table)
library(expss)
library(sjlabelled) # to call function as_label()
# Create dataframe
a <- data.table("b1" = c(1, 2, 2, 2),
"b2" = c(1, 2, 1, 1),
"b3" = c(1, 1, 1, 1))
# Set value label
val_lab(a) = num_lab("
1 Yes
2 No
")
a = as_label(a)
它看起来像这样:
> a
b1 b2 b3
1: Yes Yes Yes
2: No No Yes
3: No Yes Yes
4: No Yes Yes
我想创建一个返回每个值的总出现次数的数据集,它应该如下所示:
Category b1 b2 b3
1: Yes 2 3 4
2: No 3 1 0
这可能与 STATA 中的
tabout
功能类似。另外,返回这样的百分比会很棒
Category b1 b2 b3
1: Yes 40 75 100
2: No 60 25 0
3: sum 100 100 100
感谢您的宝贵时间,期待您的回复
一种可能性是在使用 tidyverse 包进行一些转换后使用
janitor
包:
library(janitor)
library(dplyr)
library(tidyr)
a %>%
pivot_longer(everything(), values_to = "Category") %>%
mutate(Category = c("Yes", "No")[Category]) %>%
tabyl(Category, name)
输出
Category b1 b2 b3
No 3 1 0
Yes 1 3 4
至于百分比,您可以使用
janitor
adorn
功能:
a %>%
pivot_longer(everything(), values_to = "Category") %>%
mutate(Category = c("Yes", "No")[Category]) %>%
tabyl(Category, name) %>%
adorn_percentages(denominator = "col") %>%
adorn_totals("row") %>%
adorn_pct_formatting()
输出
Category b1 b2 b3
No 75.0% 25.0% 0.0%
Yes 25.0% 75.0% 100.0%
Total 100.0% 100.0% 100.0%