【问题标题】:R, trying to create a column from another one using lag(), grouping() and arrange()R,尝试使用 lag()、grouping() 和 arrange() 从另一列创建列
【发布时间】:2023-02-26 04:30:03
【问题描述】:

求高人指点,编程新手。

我正在尝试使用函数 grouping()、arrange() 和 lag() 在我的数据框中使用来自另一列的数据创建一个新列。 我的简化数据框如下所示:

timestamp id price
2023-01-01 1 100
2023-01-02 1 102
2023-01-03 1 101
2023-01-04 1 103
2023-01-01 2 10
2023-01-02 2 12
2023-01-03 2 11
2023-01-04 2 13

我想计算每个 ID 与 2 天前相比的价格变化百分比,它看起来像这样:

timestamp id price price_%change_2d
2023-01-01 1 100 N/A
2023-01-02 1 102 N/A
2023-01-03 1 101 0.01
2023-01-04 1 103 0.0098
2023-01-01 2 10 N/A
2023-01-02 2 12 N/A
2023-01-03 2 11 0.1
2023-01-04 2 13 0.098

请注意,ID 未分组并且时间戳实际上没有正确排序,所以我想先排序。

到目前为止,我已经想出了这段代码:

df <- df %>%
  group_by(id) %>%
  arrange(timestamp) %>%
  df$"price_%change_2d" <- (df$price - lag(df$price, n = 2L)) / (lag(df$price, n = 2L))

它给了我错误:

Error in df %>% group_by(id) %>% arrange(timestamp) %>% df$price_%change_2d <- (df$price -  : 
  could not find function "%>%<-"

当我独立尝试代码的每一部分时,它们工作正常,即:

df <- df %>%
  group_by(id) %>%
  arrange(timestamp)

df$"price_%change_2d" <- (df$price - lag(df$price, n = 2L)) / (lag(df$price, n = 2L))

但我需要在计算价格变化之前订购数据框。

你能帮我吗?

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    你会想使用 mutate 来使用 group_by 就像你想要的那样。

    IE。

    library(dplyr)
    
    df %>%
      group_by(id) %>%
      arrange(timestamp) %>%
      mutate(price_perc_change_2d = (price - lag(price, n = 2L)) / (lag(price, n = 2L))) %>%
      ungroup()
    

    或者从dplyr 1.1.0(可能)缩短为:

    df %>%
      mutate(price_perc_change_2d = (price - lag(price, n = 2L)) / (lag(price, n = 2L)), .by = "id")
    

    输出:

      timestamp     id price price_perc_change_2d
      <date>     <dbl> <dbl>                <dbl>
    1 2023-01-01     1   100             NA      
    2 2023-01-02     1   102             NA      
    3 2023-01-03     1   101              0.01   
    4 2023-01-04     1   103              0.00980
    5 2023-01-01     2    10             NA      
    6 2023-01-02     2    12             NA      
    7 2023-01-03     2    11              0.1    
    8 2023-01-04     2    13              0.0833 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-26
      • 2022-11-08
      • 2015-09-04
      • 2017-12-04
      • 2020-09-19
      • 2021-07-21
      • 2022-01-05
      • 1970-01-01
      相关资源
      最近更新 更多