r - 让表(列)为未表示的值返回 0
问题描述
我正在使用一个数据集,其中我感兴趣的结果跨多个列进行编码,并采用 1、2 和 3 的值。table()
跨这些列中的任何一个运行有时会给我以下(所需)形式的结果:
1 2 3
8 87 500
但是,例如,当一列中没有 2 时,有时会给我这样的结果
1 3
5 200
这是一个问题,因为我尝试使用 rbind 组合所有这些表,我使用此代码来执行此操作。
tables = sapply(.GlobalEnv, is.table)
allquestions <- do.call(rbind, mget(names(tables)[tables]))
当此代码遇到后一种形式的表格时,它似乎将“3”列中的值视为“2”列中的值,因为“3”位于第二个位置。然后它似乎从 1 位置获取 '3' 位置的值,如下所示
1 2 3
8 87 500
5 200 5
我希望它看起来像这样:
1 2 3
8 87 500
5 0 200
有没有办法让 table() 查找可能不在列中表示的值?理想情况下,我希望它为我给出的第二个表格示例打印以下内容。
1 2 3
5 0 200
或者,有没有办法让我使用 rbind 函数的方式注意列名并适当地合并它们?
解决方案
您可以将值转换为具有级别的因子以指定它可以采用的所有值。
x <- c(1, 2, 3, 1, 2)
table(x)
x
#1 2 3
#2 2 1
x <- c(1, 3, 3)
table(x)
#x
#1 3
#1 2
table(factor(x, 1:3))
#1 2 3
#1 0 2
推荐阅读
- fortran - 英特尔并行工作室 Fortran 上的 MKL pardiso
- opencv - FFMpeg v4l2m2m 绿色输出
- kubernetes - kubernetes pod 端口没有响应
- c# - 为什么添加亚克力效果后 TitleBar 标题不见了?
- laravel - 在 Laravel-update 之后尝试在 PaginatedResourceResponse.php 中获取非对象的属性“资源”
- sql-server - Django 将日期解析为 QuerySet 中的 dd-mm-yyyy
- apache - www.example.com 的主机名 SNI/HTTP 不匹配,但 example.com 不匹配
- javascript - Javascript 正则表达式,忽略一个特定字符
- c - 我们如何为方波转换器编写特定的 C 代码?或者这样做的逻辑是什么?
- networkx - 以编程方式将大量节点/边添加到 NetworkX 图的最快方法是什么?