You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中按列统计两行间不含NA的不匹配数(分组对比)

在R中分组统计两行样本的非NA不匹配比例

先把你的示例数据转换成R可处理的矩阵结构:

# 构造示例数据
sample_data <- matrix(
  c(0,1,1,2,NA,2,1,1,
    1,1,1,2,1,1,1,1,
    2,2,1,0,0,NA,0,0,
    2,2,1,1,0,NA,0,0),
  nrow = 4, byrow = TRUE,
  dimnames = list(c("Sample1", "Sample1b", "Sample2", "Sample2b"), NULL)
)

接下来编写函数处理每组两行的对比,再批量完成所有分组统计:

# 定义处理单组两行的函数
count_mismatch <- function(row1, row2) {
  # 筛选两行均非NA的有效列
  valid_cols <- !is.na(row1) & !is.na(row2)
  # 统计有效列中数值不匹配的数量
  mismatch_num <- sum(row1[valid_cols] != row2[valid_cols])
  # 有效列总数
  total_valid <- sum(valid_cols)
  # 返回"不匹配数/有效列数"的格式
  return(paste(mismatch_num, total_valid, sep = "/"))
}

# 按每两行一组批量处理
group_indices <- seq(1, nrow(sample_data), by = 2)
results <- lapply(group_indices, function(i) {
  count_mismatch(sample_data[i, ], sample_data[i+1, ])
})

# 给结果添加分组名称
names(results) <- sapply(group_indices, function(i) {
  paste(rownames(sample_data)[i], "&", rownames(sample_data)[i+1])
})

# 查看最终结果
results

运行后会得到符合预期的输出:

$`Sample1 & Sample1b`
[1] "2/7"

$`Sample2 & Sample2b`
[1] "1/7"

代码说明

  • 矩阵构造时用byrow=TRUE保证数据和示例一致,行名对应样本标识。
  • count_mismatch函数先过滤掉含NA的列,再统计有效列中数值不等的数量,最后返回比例字符串。
  • 通过group_indices获取每组起始行索引,用lapply批量处理所有分组,添加名称后结果更易读。

如果需要数值型的比例结果,只需把函数的return语句改成return(mismatch_num / total_valid)即可。

内容的提问来源于stack exchange,提问作者user95146

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 22:58:18