Как рассчитать столбец на основе относительных ссылок на строки в R? - PullRequest
0 голосов
/ 06 июня 2018

Я очень плохо знаком с R. Я пытаюсь сделать что-то, что заняло бы две секунды в Excel, поэтому я могу только предположить, что я что-то упустил!

  • У меня есть фрейм данных, которыйсодержит квартальные данные по ВВП.
  • Я хотел бы добавить столбец к этому фрейму данных, который показывает ежегодный рост ВВП
  • Я бы рассчитал значения этого столбца как текущий уровень ВВП,разделенный на уровень ВВП четыре четверти назад
  • Я предполагаю, что это будет означать вычисление этого столбца как текущего значения столбца ВВП, разделенного на значение столбца ВВП на четыре строки далее вверх по фрейму данных

Пока у меня есть следующий код:

gdp_url <- "https://api.ons.gov.uk/dataset/PN2/timeseries/YBEZ/data"

gdp_data <- fromJSON(txt=gdp_url)
gdp_df <- as.data.frame(gdp_data["quarters"])

gdp_df$quarters.value <- as.numeric(gdp_df$quarters.value)

gdp_df$AnnualGrowth = 0

gdp_df$AnnualGrowth = (gdp_df$quarters.value/gdp_df$quarters.value[-4]) - 1

Однако полученные значения столбца AnnualGrowth просто неверны.Более того, gdp_df$quarters.value[-4] просто возвращает тот же вектор, что и gdp_df$quarters.value[].

Как сделать относительную ссылку на строку в R?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Если вы ищете коэффициент запаздывания, это сделает следующий код:

AnnualGrowth <- gdp_df$quarters.value/dplyr::lag(gdp_df$quarters.value, 4) - 1
head(AnnualGrowth, 10)
#[1]          NA          NA          NA          NA 0.025751073 0.025751073
#[7] 0.000000000 0.008438819 0.020920502 0.020920502
0 голосов
/ 06 июня 2018

Это работает для того, что вы ищете?

gdp_df$AnnualGrowth <- (c(gdp_df$quarters.value[-c(1:4)], rep(0, 4)) / gdp_df$quarters.value ) - 1

Ваш -4 в индексе просто удаляет четвертое значение и возвращает вектор, который вы хотитечтобы удалить первые четыре, именно поэтому я использовал -c(1:4) выше.

dplyr также является жизнеспособным решением:

library(dplyr)
gdp_df <- gdp_df %>% mutate(AnnualGrowth = (quarters.value / lag(quarters.value, 4)) - 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...