【问题标题】:apply t.test on every consecutive pair of columns of a data.frame对 data.frame 的每一对连续的列应用 t.test
【发布时间】:2017-03-03 14:57:32
【问题描述】:

我在下表中有一个时间序列数据框。我想在 R 中的 00:00 列和 00:15 列之间进行配对测试。然后在 00:15 和下一个之间,以此类推。

我的数据看起来像this

有人可以帮我吗?

【问题讨论】:

  • @agenis,我认为这对我不起作用。我刚刚举了一个例子,但实际上我有数千列。您还有什么建议吗?
  • 这听起来是个糟糕的计划。
  • 我想知道我是否应该对我的列进行分组。这就是为什么我需要配对分析。为什么你认为这是一个糟糕的计划?你有另一个满足这个目的的吗? @罗兰

标签: r dataframe time-series


【解决方案1】:

您可以使用 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)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-23
    • 2016-03-20
    • 2020-05-27
    • 1970-01-01
    • 2016-11-01
    • 2013-12-20
    • 2014-05-03
    • 1970-01-01
    相关资源
    最近更新 更多