如何用R创建对比两种算法结果组合计数的交叉表
问题解答
这类统计两个分类变量所有组合频数的表格叫做列联表(Contingency Table),以下是用R实现的具体方法:
步骤1:准备数据集
先把你的数据导入到R中,这里直接构造示例数据:
# 构造数据集 df <- data.frame( Sample = c("A001", "A002", "A003", "A004", "A005", "A006", "A007", "A008"), AlgoA = c("R1", "R2", "R1", "R3", "R1", "R2", "R1", "R3"), AlgoB = c("R1", "R3", "R1", "R2", "R1", "R2", "R3", "R3") )
步骤2:确保变量包含所有可能的水平
因为你的结果只有R1/R2/R3三种,先把AlgoA和AlgoB转为因子并指定所有水平,这样即使某个组合没有样本,也会显示频数为0:
df$AlgoA <- factor(df$AlgoA, levels = c("R1", "R2", "R3")) df$AlgoB <- factor(df$AlgoB, levels = c("R1", "R2", "R3"))
步骤3:生成列联表统计频数
用table()函数直接生成列联表,行对应AlgoA的结果,列对应AlgoB的结果:
# 生成列联表 contingency_table <- table(df$AlgoA, df$AlgoB) # 查看结果 contingency_table
运行后会输出:
R1 R2 R3 R1 3 0 1 R2 0 1 1 R3 0 1 1
每个单元格的数值就是对应组合的样本数,比如AlgoA=R1且AlgoB=R1的样本数是3,AlgoA=R1且AlgoB=R2的样本数是0。
可选:转成数据框格式
如果需要长格式的数据框方便后续处理,用as.data.frame()转换:
table_df <- as.data.frame(contingency_table) colnames(table_df) <- c("AlgoA", "AlgoB", "Count") print(table_df)
输出结果:
AlgoA AlgoB Count 1 R1 R1 3 2 R2 R1 0 3 R3 R1 0 4 R1 R2 0 5 R2 R2 1 6 R3 R2 1 7 R1 R3 1 8 R2 R3 1 9 R3 R3 1
内容的提问来源于stack exchange,提问作者Blaze9
相关产品推荐
相关产品推荐

