4 年または 5 年ごとのデータを含むデータ フレームがあります。データ フレームに含まれていない年のデータを補間し、データ フレームの両端にある列のデータを補間したいと考えています。
以下のコードで補間を実行できました。唯一の問題は、中央の列が繰り返され、1 つのコピーを削除する必要があることです。補間を行うより効率的な方法はありますか? 外挿を攻撃する方法もわかりません。実際のデータセットには、12 年 (列) の利用可能なデータが含まれています。
アドバイスありがとうございます。
my.data <- read.table(text = '
y1980 y1985 y1990
0.10 0.20 0.40
1.00 2.00 4.00
10.00 20.00 40.00
', header = TRUE, na.string='NA', stringsAsFactors=FALSE)
desired.result <- read.table(text = '
y1978 y1979 y1980 y1981 y1982 y1983 y1984 y1985 y1986 y1987 y1988 y1989 y1990 y1991 y1992
0.06 0.08 0.10 0.12 0.14 0.16 0.18 0.20 0.24 0.28 0.32 0.36 0.40 0.44 0.48
0.60 0.80 1.0 1.2 1.4 1.6 1.8 2.0 2.4 2.8 3.2 3.6 4.0 4.4 4.8
6 8 10 12 14 16 18 20 24 28 32 36 40 44 48
', header = TRUE, na.string='NA', stringsAsFactors=FALSE)
desired.result
# reshape data to form two columns
new.data <- reshape(my.data, direction="long",
varying = list(seq(1,(ncol(my.data)-1),1), seq(2,(ncol(my.data)-0),1)),
v.names=c("v1", "v2"))
# interpolate every row
interpol <- t(apply(new.data[,2:3], 1, function(x) approx(x, n = 6)$y))
new.data2 <- data.frame(time = new.data$time, interpol, id = new.data$id)
# reform row:column structure
my.data2 <- reshape(new.data2, idvar="id", timevar = "time", direction = "wide")
# middle columns are repeated and must be removed
my.data3 <- my.data2[, !names(my.data2) %in% c("X1.2")]
my.data3
id X1.1 X2.1 X3.1 X4.1 X5.1 X6.1 X2.2 X3.2 X4.2 X5.2 X6.2
1.1 1 0.1 0.12 0.14 0.16 0.18 0.2 0.24 0.28 0.32 0.36 0.4
2.1 2 1.0 1.20 1.40 1.60 1.80 2.0 2.40 2.80 3.20 3.60 4.0
3.1 3 10.0 12.00 14.00 16.00 18.00 20.0 24.00 28.00 32.00 36.00 40.0
機能しない補間の代替案:
sapply( seq(1, (ncol(my.data)-1), 1), function(i) {approx(c(my.data[,i], my.data[,i+1]), n = 6)$y } )