我正在研究功能数据分析。但是每个数据的长度都不同。
有50个观察。这些观察的长度为150〜200。
所以我使用这种方法,但是我想知道更高级的方法。
这是我的方法。
“创建一个将两个点连接成一条直线的函数,并使用该直线函数添加点。”
我的方法并不完美。 y值的结果中有NA。
我认为可以使用样条曲线代替直线来添加数据点。
还是可以用另一种天才的方式帮助我?我会很感激。
# This is just example. This is temperature data. Original data have 310~370 lengths.
ex[[1]] <- c(12.2, 12.1, 12.1, 12.0, 11.9, 11.8, 11.8, 11.9, 11.8, 11.9, 12.0, 11.9)
ex[[2]] <- c(12.3, 13.4, 13.3, 13.4, 13.3, 13.4, 13.2, 13.4, 13.5, 13.5)
ex[[3]] <- c(12.8, 12.8, 12.7, 12.7, 12.9, 12.5, 12.7, 12.6, 12.7, 13.0, 12.8, 12.7, 12.9, 12.0)
lengths(ex)
## V1 V2 V3
## 12 10 14
RoundMidf <- function(tv, xv){ # tv : targe vector of list, xv : reference vector
x <- c(1:length(xv))*length(tv)/length(xv) #
x1 <- ifelse(x < 1, ceiling(x), floor(x))
x2 <- ceiling(x)
y1 <- tv[x1]
y2 <- tv[x2]
a <- (y1-y2)/(x1-x2) # a of y=ax+b
b <- y1-a*x1 # b of y=ax+b
y <- a*x+b # y of y=ax+b
y[length(xv)] <- tv[length(tv)] # Last point doesn't have next point
return(y)
}
newex <- as.list(NA)
newex[[1]] <- RoundMidf(ex[[1]], ex[[3]])
newex[[2]] <- RoundMidf(ex[[2]], ex[[3]])
newex[[3]] <- ex[[3]] # reference
# Compare the data lengths before and after
DT <- data.frame(lengths(ex),lengths(newex)); names(DT) <- c("Old", "New"); DT
## Old New
## V1 12 14
## V2 10 14
## V3 14 14