分类变量的频率表作为R

如何解决分类变量的频率表作为R

我想创建所有分类变量的频率表作为R中的数据框。我想找到每个调查响应的频率和百分比(按条件分组以及总频率)。我想将其生成为数据框。

仅对一个变量(“ q1”)计数所需频率的示例。我希望数据中的大多数变量具有相似的频率计数:

enter image description here

我有这样的数据。实际数据还有更多的分类变量。

library(readr)
data_in <- read_table2("treatment_cur   q13_3   q14_1   q14_2   q14_3   q14_4   q14_5   q14_6   q14_7   q14_8   q14_9   q14_10  q14_11  q14_12  q14_13  q14_14  q14_15
Control 3   2   3   6   5   6   6   6   4   5   5   5   4   6   6   5
Control 2   4   5   6   5   6   5   5   6   4   5   5   6   5   4   6
Treatment   3   1   2   6   4   6   5   4   6   4   6   1   5   6   4   6
Control 3   2   3   6   4   6   6   6   6   6   6   6   6   5   5   6
Control NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
Control 4   6   5   6   5   6   5   6   6   5   1   1   6   5   5   6
Control 3   3   2   2   3   3   6   6   4   6   5   5   3   6   6   2
Treatment   2   3   2   3   1   3   1   1   1   3   3   3   3   3   3   1
Control 3   5   5   6   3   6   3   3   3   2   2   1   4   2   3   4
Control 2   1   1   1   1   1   4   4   1   1   1   1   1   4   4   2
Control 4   3   4   6   6   6   6   6   6   6   6   6   6   6   6   6
Control 4   2   6   6   4   6   5   6   6   5   6   5   6   6   6   6
Control 2   2   3   3   2   3   5   6   5   3   3   3   3   5   3   2
Control 3   2   4   3   4   5   4   4   5   3   3   5   4   5   5   4
Treatment   2   2   2   2   2   3   1   1   2   2   3   2   3   3   2   3
Control 4   3   3   3   5   6   6   6   6   6   6   6   6   6   6   6
Treatment   2   1   3   3   2   1   3   4   2   2   3   3   2   3   3   3
Treatment   4   2   6   4   4   2   3   5   4   5   1   1   5   4   4   5
Control 3   3   3   4   4   4   4   5   3   2   5   4   5   5   4   4
Control 4   6   6   6   6   6   6   6   6   6   6   6   5   6   6   5
Control 2   2   3   6   2   5   1   2   4   4   1   1   6   4   4   6
Treatment   4   3   3   6   6   6   6   6   6   6   6   6   6   6   6   6
Treatment   4   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
Treatment   1   1   2   4   4   4   1   1   1   1   1   1   6   1   1   6
Treatment   3   2   3   3   2   6   6   6   6   3   3   2   4   5   5   6
Control 2   1   1   1   1   1   1   2   1   1   1   1   1   2   2   1
Control 1   3   3   3   1   1   5   5   2   4   5   5   4   1   2   5
Treatment   3   4   4   5   5   4   4   4   3   5   3   4   4   6   6   5
Control NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
Control 2   2   4   6   2   4   2   2   3   5   4   4   4   3   3   5
Treatment   1   1   2   1   1   1   1   1   6   1   1   1   6   2   3   6
Treatment   2   6   1   4   4   1   1   2   2   2   1   2   1   2   2   2
Treatment   3   3   4   4   4   6   6   5   4   6   3   5   5   6   6   4
Treatment   2   1   3   3   3   3   3   3   3   3   3   3   3   3   3   3
Control 4   3   4   6   4   6   4   5   6   3   4   4   6   6   4   6
Control 4   4   3   6   2   5   2   2   4   3   1   6   5   5   5   5
Control NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
Treatment   2   3   3   6   5   6   1   2   6   5   4   4   5   5   5   6
Control 4   6   6   6   6   6   5   5   5   5   5   6   5   5   5   5
Treatment   2   1   1   3   1   3   4   4   4   4   1   4   3   4   4   4
Treatment   2   1   3   3   3   3   4   6   5   4   5   5   4   6   6   5
Control 4   6   6   6   6   6   5   5   5   6   6   5   5   5   6   6
Control NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA
Control 4   2   2   4   2   4   6   6   6   6   4   6   5   6   6   5
Control 1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
Treatment   3   4   2   5   5   5   6   5   5   5   5   5   5   6   6   6
Control NA  2   4   4   4   4   4   3   4   6   4   5   4   6   4   4
Control 2   2   2   3   1   3   4   1   1   1   2   1   3   3   3   3
Treatment   2   2   2   3   2   2   3   3   2   2   2   2   2   2   2   2
Control 3   3   3   6   6   6   6   6   6   6   5   6   6   6   6   6
Treatment   2   1   2   2   2   1   2   2   1   1   2   1   2   2   1   3
Treatment   4   5   5   6   6   5   5   6   5   5   4   5   5   4   4   5
Control 3   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
Treatment   3   3   4   4   4   6   3   2   5   3   2   2   5   6   5   6
Control 4   4   3   3   6   3   6   6   3   2   4   4   4   4   4   4
Treatment   4   1   3   4   4   4   5   6   6   6   6   6   6   6   6   6
Control 4   4   5   6   5   5   4   6   6   6   6   5   6   6   6   6
Treatment   3   3   4   6   6   6   6   6   5   6   6   5   4   6   6   4
Control 4   4   6   6   4   6   6   6   6   4   4   3   5   6   6   6
Control 4   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
Treatment   4   5   5   6   6   6   6   6   5   5   6   6   5   5   6   6
Treatment   4   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
Control 2   1   2   1   1   1   1   3   1   4   4   1   1   1   1   1
Treatment   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
Treatment   4   6   5   5   5   5   5   6   5   4   5   4   4   5   5   4
Treatment   4   6   6   6   6   6   6   6   6   6   6   6   6   6   6   6
Control 4   4   4   4   4   4   4   4   4   4   4   4   4   4   4   4
Treatment   4   5   6   6   6   5   6   6   6   5   6   6   6   6   6   6
Control 2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
Treatment   3   3   2   5   4   4   5   6   6   4   5   5   4   5   4   6
Treatment   4   5   4   4   4   5   5   6   4   5   4   3   6   6   6   6
Control 1   2   3   2   1   4   1   1   3   1   3   3   3   3   4   4
Control 3   6   6   6   6   6   5   1   5   6   5   6   6   6   6   6
Control 1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
Control 4   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
")

我当前的解决方案太复杂了。如果我想知道q13_3:q14_9中变量的频率,我知道我可以做这样的事情来找到它:

library(tables)
varList <- 2:11
data_in[varList] <- lapply(data_in[varList],factor,exclude = NULL)

  lapply(varList,function(x,df,byVar){ 
    tabular((Factor(df[[x]],paste(colnames(df)[x])) + 1) ~ ((Factor(df[[byVar]],paste(byVar)))*((n=1) + Percent("col"))),data= df) 
  },data_in,"treatment_cur") 

下面是我当前输出的摘要。问题在于,输出是无法导出到单个excel工作表的列表的列表。我必须手动将所有内容从控制台复制到Excel文件中。

       treatment_cur                          
       Control               Treatment        
 q14_8 n             Percent n         Percent
 1      6             13.953  4         12.50 
 2      4              9.302  4         12.50 
 3      5             11.628  2          6.25 
 4      6             13.953  4         12.50 
 5      5             11.628  7         21.88 
 6     13             30.233 11         34.38 
 NA     4              9.302  0          0.00 
 All   43            100.000 32        100.00 

[[10]]
                                              
       treatment_cur                          
       Control               Treatment        
 q14_9 n             Percent n         Percent
 1      6             13.953  4         12.50 
 2      6             13.953  4         12.50 
 3      4              9.302  4         12.50 
 4      6             13.953  5         15.62 
 5      5             11.628  8         25.00 
 6     12             27.907  7         21.88 
 NA     4              9.302  0          0.00 
 All   43            100.000 32        10

这很好,但是我想:

  1. 同时在每个列中找到每个变量值(处理+条件)的总频率(如上图所示);
  2. 我不喜欢用于生成此输出的功能。我想将其导出到excel文件中,但是由于此输出实际上是列表列表(无法导出到excel),因此我发现将这些值从控制台复制并粘贴到excel中非常麻烦。我想要找到这些频率的更简单方法!当然,R有更好的方法可以做到这一点...

非常感谢任何帮助!

解决方法

一种实现方法是使用gtsummary包进行探索。

使用上面的代码,您可以轻松地生成带有计数和百分比的表格:

library(gtsummary)
library(readr)
library(flextable)


tbl_summary(data_in,by = "treatment_cur") %>% 
    add_overall() %>% 
    as_flex_table() %>% 
    flextable::save_as_docx(.,path = "G:/test.docx")

如果您只是运行:

tbl_summary(data_in,by = "treatment_cur") %>% 
        add_overall()

您将看到它为您生成的表。之后需要额外的代码,因此可以将其导出到docx文件。从那里,您可以将其复制到excel。这将生成您请求的计数,您可以确定它是否是更简单的实现。

另一种替代方法是直接写入csv文件:

tbl_summary(data_in,by = "treatment_cur") %>% 
    add_overall() %>% 
    as_tibble() %>% 
    readr::write_csv( .,path = "G:/test.csv")

或 如果确实需要将所有内容放在单独的列中,则可以将n和percents分成两个表,将它们合并,然后写入csv。

#keep counts only
ncount <- tbl_summary(data_in,by = "treatment_cur",statistic = all_categorical()~ "{n}") %>% 
    add_overall() 

#keep pcts only

pctdata <- tbl_summary(data_in,statistic = all_categorical()~ "{p}%") %>% 
  add_overall() 
#combine and output

tbl_merge(list(ncount,pctdata)) %>% 
      as_tibble() %>% 
      readr::write_csv(.,"G:/test2.csv")

编辑: 解决此问题的另一种方法是使用janitor软件包。您可以很容易地修饰计数和百分比,并将数据集合并在一起。之后,很容易导出到csv / Excel。这里的一个缺点是,您必须遍历变量以获取每个变量的表,然后将它们组合在一起,但是下面的代码是创建它的一个很好的开始:

library(janitor)


datatry <- data_in %>% 
          janitor::tabyl( q13_3,treatment_cur) %>% 
          adorn_totals("col") %>% 
          adorn_totals("row")

datatry2 <- data_in %>% 
  janitor::tabyl( q13_3,treatment_cur) %>% 
  janitor::adorn_percentages(denominator = 'col') %>% 
  adorn_totals("row") %>% 
  adorn_totals("col") %>% 
  mutate(Total = ifelse(is.na(q13_3),Total,ifelse(q13_3 == 'Total',1,Total)))

datatry3 <- inner_join(datatry,datatry2,by = 'q13_3') %>%
            mutate(variable ='q13_3')
,

假设您如上所述构建了data_in

library(dplyr)
library(purrr)

# reformat
tt <- data_in$treatment_cur
data_in$treatment_cur <- NULL

data_in %>% map(function(a)
{
    ret <- data.frame(Treatment.n=rep(0,6),Control.n=rep(0,6))
    b <- table(a[tt=="Treatment"])
    ret[names(b),"Treatment.n"] <- b
    b <- table(a[tt=="Control"])
    ret[names(b),"Control.n"] <- b
    ret$Treatment.percent <- ret$Treatment.n / sum(ret$Treatment.n)
    ret$Control.percent <- ret$Control.n / sum(ret$Control.n)
    ret
}) %>% do.call(what=cbind)

假设答案数据为\ 1..6,并且NA被忽略。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-