创建一个表,返回多个变量的每个值的计数

问题描述 投票:0回答:1

这是我的数据框

# 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

感谢您的宝贵时间,期待您的回复

r dataframe count stata frequency
1个回答
1
投票

一种可能性是在使用 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%
© www.soinside.com 2019 - 2024. All rights reserved.