【发布时间】: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))
但我需要在计算价格变化之前订购数据框。
你能帮我吗?
【问题讨论】: