您可以使用 for 循环来做到这一点:
res=NULL
for(i in 2:ncol(df)){
res<-c(res, t.test(df[, i-1], df[, i], paired=T)$p.value)
}
print(res)
#### [1] 0.87346300 0.29767460 0.07232177
或使用apply 系列函数:
sapply(2:ncol(df), function(x) t.test(df[, x-1], df[, x], paired=T)$p.value)
#### [1] 0.87346300 0.29767460 0.07232177
我看到了使用rowr::rollApply 的第三种解决方案,它将函数应用于滚动窗口,此处为 2(用于转置数据)
library(rowr)
rollApply(t(df), function(x) t.test(x[1, ], x[2, ], paired=T)$p.value, minimum=2, window=2)
#### [1] 0.87346300 0.29767460 0.07232177
我建议调整置信度以考虑比较的多重性(例如alpha/(ncol(df)-1))
您的数据:
set.seed(1)
df=as.matrix(data.frame(rnorm(4),rnorm(4), rnorm(4), rnorm(4)))