Lag Dataframe в R - PullRequest
       20

Lag Dataframe в R

1 голос
/ 19 марта 2020

У меня есть следующий data.frame:

A <- c(10,
       12,
       14.4,
       17.28,
       20.736)
B <- c(6,
       7.8,
       10.14,
       13.182,
       17.1366)

df <- data.frame(A, B)
df

, который выглядит следующим образом:

       A       B
1 10.000  6.0000
2 12.000  7.8000
3 14.400 10.1400
4 17.280 13.1820
5 20.736 17.1366

Теперь я хотел бы иметь точную таблицу, но с факторами роста :

   A   B
1  1   1
2  1.2 1.3
3  1.2 1.3
4  1.2 1.3
5  1.2 1.3

Таким образом, «отставание» должно быть одной позицией: следующее значение должно быть разделено на предыдущее значение. Есть ли функция для этого?

Ответы [ 2 ]

2 голосов
/ 19 марта 2020

Если значения не должны обновляться для следующей итерации

library(dplyr)
df %>%
   mutate_all(~ ./lag(., default = first(.)))
#   A   B
#1 1.0 1.0
#2 1.2 1.3
#3 1.2 1.3
#4 1.2 1.3
#5 1.2 1.3

Если значения необходимо обновить, мы можем использовать accumulate из purrr

df %>% 
     mutate(A =  purrr::accumulate(A, ~ .x/.y))

или для нескольких столбцов

df %>%
        mutate_all(~ purrr::accumulate(., `/`))
2 голосов
/ 19 марта 2020

Base R:

df2 <- as.data.frame(lapply(df, function(a) c(1, a[-1] / a[-length(a)])))
df2
#     A   B
# 1 1.0 1.0
# 2 1.2 1.3
# 3 1.2 1.3
# 4 1.2 1.3
# 5 1.2 1.3

Я делаю вывод, что первое должно быть "1.0", поскольку на первом рост отсутствует. Можно также легко утверждать, что первое должно быть NA. За вами.

...