R 中的滞后数据帧
Lag Dataframe in R
我有以下 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
现在,我想要精确的 table,但要有增长因素:
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
所以 "lag" 应该是一个位置:下一个值应该除以前一个值。
有这个功能吗?
基数 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
。交给你了。
如果下一次迭代不应更新值
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
from purrr
df %>%
mutate(A = purrr::accumulate(A, ~ .x/.y))
或多列
df %>%
mutate_all(~ purrr::accumulate(., `/`))
我有以下 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
现在,我想要精确的 table,但要有增长因素:
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
所以 "lag" 应该是一个位置:下一个值应该除以前一个值。 有这个功能吗?
基数 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
。交给你了。
如果下一次迭代不应更新值
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
from purrr
df %>%
mutate(A = purrr::accumulate(A, ~ .x/.y))
或多列
df %>%
mutate_all(~ purrr::accumulate(., `/`))