我正在尝试使用 seqtime ( https://github.com/hallucigenia-sparsa/seqtime ) 来分析时间序列微生物组数据,如下所示:
meta = data.table::data.table(day=rep(c(15:27),each=3), condition =c("a","b","c"))
meta<- meta[order(meta$day, meta$condition),]
meta.ts<-as.data.frame(t(meta))
otu=matrix(1:390, ncol = 39)
oturar<-rarefyFilter(otu, min=0)
rarotu<-oturar$rar
time<-meta.ts[1,]
interp.otu<-interpolate(rarotu, time.vector = time,
method = "stineman", groups = meta$condition)
插值返回以下错误:
[1] "Processing group a"
[1] "Number of members 13"
intervals
0
12
[1] "Selected interval: 1"
[1] "Length of time series: 13"
[1] "Length of time series after interpolation: 1"
Error in stinepack::stinterp(time.vector, as.numeric(x[i, ]), xout = xout, :
The values of x must strictly increasing
我试图将方法更改为“hyman”,但它返回以下错误:
Error in interpolateSub(x = x, time.vector = time.vector, method = method) :
Time points must be provided in chronological order.
我正在使用 R 版本 3.6.1,我对 R 有点陌生。
谁能告诉我我做错了什么/如何解决这些错误? 非常感谢!
最佳答案
我花了很多时间摸索着想弄明白这个问题。这一切都归结为 meta 的数据结构和用作 time.vector
参数输入的结果时间变量。
当 meta.ts
被转换为数据框时,所有字符串都会自动转换为因子 - 这包括 day
。
要进行调整,您可以将代码编辑为以下内容:
library(seqtime)
meta <- data.table::data.table(day=rep(c(15:27),each=3), condition =c("a","b","c"))
meta <- meta[order(meta$day, meta$condition),]
meta.ts <- as.data.frame(t(meta), stringsAsFactors = FALSE) # Set stringsAsFactors = FALSE
otu <- matrix(1:390, ncol = 39)
oturar <- rarefyFilter(otu, min=0)
rarotu <- oturar$rar
time <- as.integer(meta.ts[1,]) # Now 'day' is character, so convert to integer
interp.otu <- interpolate(rarotu, time.vector = time,
method = "stineman", groups = meta$condition)
作为奖励,请阅读 this有关 stringsAsFactors
参数的信息的博文。字符串自动转换为因子是一种常见的困惑。
关于r - 如何使用 seqtime 在 R 中的组内插入数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58927502/