首页 > 解决方案 > 让表(列)为未表示的值返回 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 函数的方式注意列名并适当地合并它们?

标签: r

解决方案


您可以将值转换为具有级别的因子以指定它可以采用的所有值。

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 

推荐阅读