【问题标题】:Lag Dataframe in RR中的滞后数据框
【发布时间】:2020-03-18 21:54:13
【问题描述】:

我有以下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

所以“滞后”应该是一个位置:下一个值应该除以前一个值。 有这个功能吗?

【问题讨论】:

  • 你如何计算A第一行的1.2增长?
  • 是最后的预期输出
  • 1.2 = 12/10 1.2 = 14.4/12 1.2 = 17.280/14.4 等
  • D.Studer,当然,但那是四个 1.2 ......第五个来自哪里?
  • 对不起,第一个值应该是 1(或 0)

标签: r lag sapply


【解决方案1】:

如果值不应该为下一次迭代更新

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(., `/`))

【讨论】:

    【解决方案2】:

    基础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。交给你了。

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 2021-04-21
      • 2019-05-22
      • 1970-01-01
      • 2011-04-03
      相关资源
      最近更新 更多