You need to enable JavaScript to run this app. R语言data.table按行分组列执行ks.test并计算p.value的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

R语言data.table按行分组列执行ks.test并计算p.value的实现方法

R语言data.table按行执行KS检验实现方案

你需要的逐行分组KS检验可以通过data.table的逐行分组语法实现,完整实现代码如下:

# 加载data.table包
library(data.table)

# 导入数据集并转换为data.table格式
df <- read.table("file.tsv", sep="\t", header=TRUE)
setDT(df)
# 逐行执行KS检验并新增结果列
df[, c("pval", "hyp") := {
  # 提取当前行的两组数值并转为向量
  group1 <- unlist(.SD[, .(A, B)])
  group2 <- unlist(.SD[, .(C, D, E)])
  # 执行KS检验,添加exact=FALSE避免小样本警告
  res <- ks.test(group1, group2, exact = FALSE)
  # 返回p值和备择假设结果
  .(res$p.value, as.character(res$alternative))
}, by = 1:nrow(df)]
  • 如果你需要使用单侧检验,只需在ks.test函数中添加alternative参数即可,可选值为"two.sided"(默认,双尾)、"less"、"greater"(后两者为单尾),对应输出的hyp列会自动匹配结果。
  • 运行完成后直接打印df即可得到你需要的包含pval、hyp列的结果表。

你可以用以下示例代码直接验证效果:

# 测试用示例数据构造
test_df <- read.table(text = "
sno A B C D E
r1 1 3 5 6 7
r2 8 9 1 5 3
r3 2 4 6 8 10
r4 11 2 3 7 6
", header = TRUE)
setDT(test_df)

# 执行检验逻辑
test_df[, c("pval", "hyp") := {
  group1 <- unlist(.SD[, .(A, B)])
  group2 <- unlist(.SD[, .(C, D, E)])
  res <- ks.test(group1, group2, exact = FALSE)
  .(res$p.value, as.character(res$alternative))
}, by = 1:nrow(test_df)]

# 查看结果
print(test_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 07:36:04