R语言table函数结合两个向量使用时的运行原理是什么
R语言table()函数双向量调用机制与计数规则
核心运行逻辑
当你给table()传入两个等长向量时,函数会生成二维列联表:首先将两个向量按位置一一配对,最终统计每一种配对组合的出现次数,填入对应单元格。
数值生成规则
以你给出的示例为例,首先先列出两个向量的所有位置配对:
# 两个向量的位置对应关系 # 索引: 1 2 3 4 5 6 7 ratings = c("Worst","Worst","Bad","Bad","Good","Bad","Bad") reviewers = c("Siskel","Siskel","Elbert","Elbert","Martin","Rowen","Martin")
配对后的7组组合分别为:
- (Worst, Siskel)
- (Worst, Siskel)
- (Bad, Elbert)
- (Bad, Elbert)
- (Good, Martin)
- (Bad, Rowen)
- (Bad, Martin)
生成列联表时:
- 行名取第一个输入向量
ratings的唯一取值,默认按字母顺序排序:Bad、Good、Worst - 列名取第二个输入向量
reviewers的唯一取值,默认按字母顺序排序:Elbert、Martin、Rowen、Siskel - 每个单元格的数值,就是对应「行取值+列取值」的配对组合在上述列表中的出现次数
比如你提到的Elbert列:
- Bad行对应
(Bad, Elbert)组合,一共出现2次,所以值为2 - Good行对应
(Good, Elbert)组合,没有出现过,所以值为0 - Worst行对应
(Worst, Elbert)组合,没有出现过,所以值为0
其他单元格的数值都遵循这个规则,比如Siskel列的Worst行值为2,就是对应(Worst, Siskel)组合出现了2次。
额外注意事项
- 两个输入向量必须长度相等,否则无法按位置配对,函数会报错
- 如果输入的是因子类型向量,会直接用因子的已有水平作为行/列名,不会自动过滤没有出现的水平;如果是字符向量,默认只取出现过的唯一值作为行/列名
- 如果需要处理缺失值,可以通过
useNA参数调整统计规则,默认会将NA作为单独的分类统计
内容的提问来源于stack exchange,提问作者SRIMANIKANTA PANNASI
相关产品推荐
相关产品推荐

