R语言如何让table交叉表保留缺失组合输出固定c(2,3,3)维度数组
解决方案
方法1:生成table时提前指定因子水平(推荐)
R的table()函数默认会自动丢弃没有观测值的水平,你只需要在构造交叉表前,将三个统计变量显式转为指定水平的因子,即可强制保留所有维度,缺失组合自动填充为0:
# 仅需修改你代码中生成tmp的部分 var1 <- factor(as.vector(x[-c(1,nrow(x)),-c(1,ncol(x))]), levels = c(0, 1)) var2 <- factor(as.vector(nonedge.likes.x[,-c(1,ncol(likes.x))]), levels = c(0, 1, 2)) var3 <- factor(as.vector(nonedge.likes.y[-c(1, nrow(likes.y)),]), levels = c(0, 1, 2)) tmp <- table(var1, var2, var3)
运行后不管输入矩阵是什么取值,tmp都会固定为c(2,3,3)维度的表数组。
方法2:事后将压缩table转换为固定维度数组
如果你已经生成了压缩后的table对象,也可以手动构造全0数组再填充现有值:
# 初始化固定维度的全0数组 fixed_tmp <- array(0, dim = c(2,3,3), dimnames = list(c("0","1"), c("0","1","2"), c("0","1","2"))) # 提取现有table的观测值 existing_data <- as.data.frame(tmp) # 逐行填充到固定维度数组 for (i in seq_len(nrow(existing_data))) { fixed_tmp[ as.character(existing_data[i,1]), as.character(existing_data[i,2]), as.character(existing_data[i,3]) ] <- existing_data[i,4] }
内容的提问来源于stack exchange,提问作者user3236841
相关产品推荐
相关产品推荐

