Интерполяция для оценки данных средних лет в R - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть двухлетние данные для каждого идентификатора, где y2011 и y2016 представляют данные за 2011 и 2016 годы соответственно.

id <- c(1:5)
y2011 <- c(100,200,150,121,20)
y2016 <- c(111,195,180,121,25)

dat <- data.frame(id, y2011, y2016)

Теперь я хочу оценить приблизительные данные средних лет 2012, 2013, 2014, 2015 с помощью интерполяции.Как я могу сделать это с помощью R?Я пробовал approx функцию в R.

approx(dat$y2011, dat$y2016)

Но не получить правильное решение.

1 Ответ

0 голосов
/ 30 ноября 2018

Вот один из вариантов.Вам нужно вызвать approx для каждой строки, поэтому я использую mapply для этого.

middle_years <- t(mapply(function(a, b) approx(c(2011,2016), c(a,b), 2012:2015)$y, dat$y2011, dat$y2016))
colnames(middle_years) <- paste0("y", 2012:2015)

cbind(dat, middle_years)
#   id y2011 y2016 y2012 y2013 y2014 y2015
# 1  1   100   111 102.2 104.4 106.6 108.8
# 2  2   200   195 199.0 198.0 197.0 196.0
# 3  3   150   180 156.0 162.0 168.0 174.0
# 4  4   121   121 121.0 121.0 121.0 121.0
# 5  5    20    25  21.0  22.0  23.0  24.0
...