R:是否有与 Stata 的 codebookout 命令等效的命令?

2023-12-01

在 Stata 中我可以使用codebookout命令创建一个 Excel 工作簿,保存现有数据集中所有变量的名称、标签和存储类型及其相应的值和值标签。

我想在 R 中找到一个等效的函数。到目前为止,我遇到过memisc库有一个名为codebook,但它所做的事情与 Stata 中不同。

例如,在 Stata 中,密码本的输出将如下所示...(见下文 - 这就是我想要的)

Variable Name   Variable Label    Answer Label  Answer Code    Variable Type
    hhid               hhid           Open ended                    String
    inter_month        inter_month    Open ended                    long
    year               year           Open ended                    long
    org_unit           org_unit                                     long
                                      Balaka         1  
                                      Blantyre       2  
                                      Chikwawa       3  
                                      Chiradzulu     4  

即数据框中的每一列都会被评估以生成 5 个不同列的值:

  • 变量名称是列的名称
  • 变量标签是 列的名称
  • 答案标签是答案中的唯一值 柱子。如果没有唯一值,则被视为开放式
  • 答案代码是答案标签中每个类别的数字分配。如果答案标签不是明确的,则为空。
  • 变量类型:int、str、long(日期)...

这是我的尝试:

CreateCodebook <- function(dF){
  numbercols <- length(colnames(dF))

  table <- data.frame()

  for (i in 1:length(colnames(dF))){
    AnswerCode <- if (sapply(dF, is.factor)[i]) 1:nrow(unique(dF[i])) else ""
    AnswerLabel <- if (sapply(dF, is.factor)[i]) unique(dF[order(dF[i]),][i]) else "Open ended"
    VariableName <- if (length(AnswerCode) - 1 > 1) c(colnames(dF)[i], 
                                                  rep("",length(AnswerCode) - 1)) else colnames(dF)[i]
    VariableLabel <- if (length(AnswerCode) - 1 > 1) c(colnames(dF)[i], 
                                                   rep("",length(AnswerCode) - 1)) else colnames(dF)[i]
    VariableType <- if (length(AnswerCode) - 1 > 1) c(sapply(dF, class)[i], 
                                                  rep("",length(AnswerCode) - 1)) else sapply(dF, class)[i]

    df = data.frame(VariableName, VariableLabel, AnswerLabel, AnswerCode, VariableType)
    names(df) <- c("Variable Name", "Variable Label", "Variable Type", "Answer Code", "Answer Label")
    table <- rbind(table, df)

  }
  return(table)
}

不幸的是,我收到以下警告消息:

Warning messages:
1: In `[<-.factor`(`*tmp*`, ri, value = 1:3) :
  invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, ri, value = 1:2) :
  invalid factor level, NA generated

我产生的输出导致答案代码标签变得混乱:

              Variable Name Variable Label Variable Type Answer Code Answer Label
hhid                   hhid           hhid    Open ended                character
month                 month          month    Open ended                  integer
year                   year           year    Open ended                  integer
org_unit           org_unit       org_unit    Open ended                character
v000                   v000           v000    Open ended                character
v001                   v001           v001    Open ended                  integer
v002                   v002           v002    Open ended                  integer
v003                   v003           v003    Open ended                  integer
v005                   v005           v005    Open ended                  integer
v006                   v006           v006    Open ended                  integer
v007                   v007           v007    Open ended                  integer
v021                   v021           v021    Open ended                  numeric
2285                   v024           v024       central        <NA>       factor
1                                                  north        <NA>             
7119                                               south        <NA>             
11                     v025           v025         rural        <NA>       factor
1048                   v025           v025         urban        <NA>       factor
district_name district_name  district_name    Open ended                character
coords_x1         coords_x1      coords_x1    Open ended                  numeric
coords_x2         coords_x2      coords_x2    Open ended                  numeric
itn_color         itn_color      itn_color    Open ended                  numeric
piped                 piped          piped    Open ended                  numeric
sanit                 sanit          sanit    Open ended                  numeric
sanit_cd           sanit_cd       sanit_cd    Open ended                  numeric
water                 water          water    Open ended                  numeric

我决定为了自己的娱乐而尝试一下。我用的是内置的Titanic数据集。不过,我对你的定义之一有疑问:你说“如果没有唯一的值,则被认为是开放式的”。但every长度 >0 的变量有一些唯一的值:您的意思是“如果每个值都是唯一的”吗?即使这个定义也不一定按预期工作:在Titanic数据集上,响应是整数,并且 32 个总数中恰好只有 22 个唯一值。我不认为人们真的希望枚举它,所以我测试了类型factor相反(但你可以替换length(u)==length(x)如果你真的想要的话,请在下面一行)。

## utility function: pad vector with blanks to specified length
pad <- function(x,n,p="") {
    return(c(x,rep(p,n-length(x))))
}
## process a single column
proc_col <- function(x,nm) {
    u <- unique(x)
    ## if (length(u)==length(x)) {
    if (!is.factor(x)) {
        n <- 1
        u <- "open ended"
        cc <- ""
    } else {
        cc <- as.numeric(u)
        n <- length(u)
    }
    dd <- data.frame(`Variable Name`=pad(nm,n),
               `Variable Label`=pad(nm,n),
               `Answer Label`=u,
               `Answer Code`=cc,
               `Variable Type`=pad(class(x),n),
               stringsAsFactors=FALSE)
    return(dd)
}
## process all columns
proc_df <- function(x) {
    L <- Map(proc_col,x,names(x))
    dd <- do.call(rbind,L)
    rownames(dd) <- NULL
    return(dd)
}

Example:

xx <- as.data.frame.table(Titanic)
proc_df(xx)

##    Variable.Name Variable.Label Answer.Label Answer.Code Variable.Type
## 1          Class          Class          1st           1       factor
## 2                                        2nd           2              
## 3                                        3rd           3              
## 4                                       Crew           4              
## 5            Sex            Sex         Male           1       factor
## 6                                     Female           2              
## 7            Age            Age        Child           1       factor
## 8                                      Adult           2              
## 9       Survived       Survived           No           1       factor
## 10                                       Yes           2              
## 11          Freq           Freq   open ended                  numeric

我没有在代码值列表等之前留下空格,但您可以自己进行这些调整......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R:是否有与 Stata 的 codebookout 命令等效的命令? 的相关文章

随机推荐

  • 如何使用自定义概率分布进行随机选择

    我有一份来自美国人口普查网站的美国姓名及其各自的姓名列表 我想使用给定的概率从此列表中生成一个随机名称 数据在这里 美国人口普查数据 我见过类似的算法轮盘赌选择算法很容易实现 但我想知道是否有任何方法可以在 O 1 中生成随机名称 为了直方
  • gcloud docker 推送可靠性

    我在推送图像时遇到了很多问题gcloud docker push过去几周 我已经阅读了许多堆栈溢出讨论以及 github 问题和解决方法 但我还没有找到解决不一致问题的方法 通常我会尝试推送一两个容器镜像 第一次推送几乎总是会失败 并显示以
  • 如何将我的谷歌地图应用程序转换为谷歌地球应用程序?

    在maps google com上 您可以看到一个精彩的例子 展示谷歌地图应用程序如何突然顺利地变成谷歌地球应用程序 我正在开发一个谷歌地图应用程序 使用 API 版本 3 我在 Google Earth API 摘要中阅读了以下行 如果您
  • Java MouseEvent位置不准确

    我在 Java 中使用我创建的 canvas 类遇到了问题 该类是一个扩展JPanel 绘制动画环形图 该图表使用的是MouseListener获取点击事件 问题是鼠标位置似乎不准确 这意味着它似乎不是相对于 画布 而是相对于窗口 在左上角
  • 找不到适用于 jdbc:mysql://localhost/ 的驱动程序

    我正在尝试将我的代码从 Linux 移植到 mac OSX LION 下面的方法在linux上工作得很好 Connection getConnection throws SQLException String url jdbc mysql
  • cakephp复杂查询多个“OR”条件

    我想用 cakephp 进行这样的查询 WHERE text LIKE keyword AND text LIKE something OR text LIKE something OR AND text LIKE other OR tex
  • 使用 OpenCV 进行水平线检测

    我试图从来自 文档 的图像中找到水平线和垂直线 这些文档是合同的扫描页面 因此这些行看起来就像您在表格或合同块中看到的那样 我一直在尝试 OpenCV 来完成这项工作 OpenCV 中的霍夫变换实现似乎对这项工作很有用 但我找不到任何参数组
  • pandas:根据其他列乘以列

    我有一个包含 a 列和 b 列的数据框 如果 b 为真 我想将 a 列乘以值 x 如果 b 为假 我想将列 a 乘以值 y 实现这一目标的最佳方法是什么 您可以分两步完成 df loc df b a x df loc df b False
  • QTablewidget 删除而不创建新行

    我有一个 QTableWidget 并且 1 列只有复选框 因此对于这些项目我有这些标志 create prototype for checkbox item checkItem new QTableWidgetItem Qt ItemFl
  • C# 中 Form 的 RightToLeft 属性

    我想将表单标题 图标和关闭以及帮助按钮从左侧移动到右侧 更改布局 我手动移动表单控件以保留背景图像 但现在我想更改表单标题 当我在表单属性中将 rightToLeft 属性设置为 yes 并将 rightToLeftLayout 设置为 t
  • 如何像 Firefox 那样在 IE 中的内联编辑中将 jqgrid 保存为灰色

    如果行保存在 jqGrid 的内联编辑中 FireFox 在保存操作期间会使网格变暗 变灰 Internet Explorer 9 不会更改网格外观 loadui 参数未使用 因此它应该具有默认值 启用 如果刷新网格 它不会按预期在两个浏览
  • 了解 Node.js 中 javascript 回调的概念,尤其是循环中的回调

    我刚刚开始使用node js 我做了一些 ajax 的东西 但没有太复杂 所以回调仍然有点超出我的能力 我研究了异步 但我需要的只是按顺序运行一些函数 我基本上有一些东西可以从 API 中提取一些 JSON 创建一个新的 JSON 然后用它
  • Azure DevOps CI/CD 以及将连接字符串与源代码管理分离

    因此 我一直在通过许多博客 SO 帖子遵循许多不同的想法 策略 但我一直无法找到我的想法解决方案 我正在使用什么 视觉工作室 2017 v15 9 6 Git 源代码管理 Azure DevOps CI CD Azure 应用服务 用于托管
  • 如何统计列表列表中相同值的最长序列,然后输出元组中最大的序列

    我有一个文本文件中的列表 9 的列表 其值类似于以下内容 L 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
  • 使用 Android 相机识别颜色

    目前正在从事一项有关 Android 颜色检测的学术项目 我正在尝试使用 Android 相机在实时预览期间或拍照后检测颜色 我正在寻找类似这张图片的东西 这是颜色抓取安卓应用程序截图 基本上我想将每种颜色识别为特定的一种颜色 让我们举个例
  • React + Redux - 在哑组件中调度一个动作?

    我开始学习 Redux 整个想法看起来很简洁 但是在将我的 React 应用程序从 正常 重建为 redux way 后 这个问题出现了 我有一个基于异步调用的 JSON 构建的 if 项目列表 然后该列表中的每个项目都会在单击时发送异步调
  • JavaScript 递归将列表格式从 XML 转换为 HTML

    我有一个练习 要求我使用递归将 XML 数据输出到 HTML 列表标记中 可耻地承认我在数学方面的缺点 我希望有人向我展示如何使用 JavaScript 对 XML 的 节点结构 实现递归逻辑 结果如下 JSFiddle EDIT添加了示例
  • 如何使用缺少今天构建的列表在 iTunesConnect 中创建“构建”记录?

    Problem 显然 iTunesConnect 希望我通过选择最近的构建来创建 构建 记录 但今天的构建没有出现 Details 首先我选择Product gt Build在 Xcode 5 1 1 中 我转到 MyApps 下的 iTu
  • 如何访问 Angular2 新的路由器查询字符串

    我怎样才能访问querystring我的组件的参数 我有这样的网址 http myurl com myroute myparam 1 thanks HintRC 1 angular router也已弃用 最好坚持 angular route
  • R:是否有与 Stata 的 codebookout 命令等效的命令?

    在 Stata 中我可以使用codebookout命令创建一个 Excel 工作簿 保存现有数据集中所有变量的名称 标签和存储类型及其相应的值和值标签 我想在 R 中找到一个等效的函数 到目前为止 我遇到过memisc库有一个名为codeb