Создание новых значений для столбца из вектора различий

Итак, у меня есть фрейм данных дат и столбец ответов, и у меня есть вектор различий, чтобы показать изменение с течением времени для набора новых значений, которые я хочу добавить в столбец ответов. Как я могу выполнить какое-то матричное вычитание, чтобы взять значения из вектора и отличить их от существующих значений в столбце, чтобы получить новые значения?

Фрейм данных настроен следующим образом:

data <- data.frame(seq(from = 2001, to = 2020, 1))
data$y <- (runif(20, 1, 10))
data$y[11:20] <- NA
colnames(data)[1] <- "Year" 

вектор разностей выглядит так:

vector <- runif(10, -1, 1)

Таким образом, желаемый результат будет выглядеть так:

Year    y
2011    y10+vector1 = y11
2012    y11+vector2 = y12
2013    y12+vector3 = y13

и так далее...


person Kardinol    schedule 03.04.2019    source источник


Ответы (2)


Одной из возможностей было бы использовать функцию cumsum:

set.seed(1)
data <- data.frame(seq(2001, 2020, 1))
data$y <- (runif(20, 1, 10))
data$y[11:20] <- NA
colnames(data)[1] <- "Year" 

myvector <- runif(10, -1, 1)
data$y[11:20] <- data$y[10] + cumsum(myvector)

Кроме того, рекомендуется устанавливать случайное начальное число (с помощью set.seed) при работе со случайными числами.

person Cettt    schedule 03.04.2019

Следующее получает кумулятивную сумму вашего вектора ответов, но начиная со значения y в 2010 году.

responses <- c(data$y[data$Year == 2010], vector)

new_data <- data.frame(year = 2010:2020,
                       y = cumsum(responses))

   year        y
1  2010 3.263457
2  2011 2.891375
3  2012 3.567775
4  2013 4.330650
5  2014 4.972721
6  2015 5.008574
7  2016 5.306517
8  2017 5.304533
9  2018 5.066068
10 2019 4.688454
11 2020 4.851382
person Felipe Alvarenga    schedule 03.04.2019