通过找到价格的变化来获得变化率

Get the rate of change by finding the change in price

更新: 结果我得到了一个奇怪的结果。有时,结果的最早日期显示在 2 或 3 次之后,例如

Item Kg Date_1 Price_1 change_1 Date_2 Price_2 change_2
Apples 1 2022-02-01 1 NA 2022-02-16 2 1
Meat NA NA NA NA 2022-02-03 1 NA

正如您所见,肉一开始没有变化,但结果显示在第二个中。这发生在整个程序中。知道为什么吗?

我对编程还很陌生。我正在处理我的投资组合,并且正在查看有关从配送中心到杂货店的食品价格的数据集。我正在查看的是一组包含价格、项目和交易日期的数据。我正在寻找的是找到从配送中心到商店的变化率,以及它发生的时间。

注意:商品价格从配送中心更改。

这是我正在查看的示例:

Date Item Price Kg
01.02.2022 Apple .00 1
02.02.2022 Meat .00 1
03.02.2022 Fish .00 1
03.02.2022 Bread .00 1
15.02.2022 Meat .00 1
15.02.2022 Meat .00 1
16.02.2022 Apple .00 1
20.02.2022 Fish .00 1
25.02.2022 Apple [=11=].50 1

如您所见,相同数量的相同产品的价格随时间随机变化。我想分析的是:

  1. 每个项目的变化率
  2. 变化发生的时间

这是理想的结果:

item kg 1st_price 1st_price_date 2nd_price 2nd_price_date amount_of_change
Apple 1 .00 01.02.2022 .00 16.02.2022 +.00
Meat 1 .00 02.02.2022 .00 15.02.2022 +.00
Bread 1 .00 03.02.2022 N/A N/A N/A
Fish 1 .00 03.02.2022 .00 20.02.2022 +[=12=].00

#继续下面的table。这些列将位于上面列的右侧。 #不幸的是,Whosebug 无法创建包含所有内容的 table。 #total_change 是整个期间

item 3rd_price 3rd_price_date amount_of_change change_duration_period total_change
Apple [=13=].50 25.02.2022 -.50 01.02.2022-25.02.2022 -[=13=].50
Meat .00 15.02.2022 -.00 02.02.2022-1502.2022 -.00
Bread N/A N/A N/A 03.02.2022-03.02-2022 +[=13=].00
Fish .00 20.02.2022 +[=13=].00 03.02.2022-20.02.2022 +[=13=].00

如您所见,有些商品每月的价格变化可能比其他商品大,具体取决于商品。有些项目有很大的变化,有些根本没有变化。

假设有超过 14,000 个独特的项目,您会推荐什么来收集数据并将它们放在 table 中,如“理想结果”部分所示?

我是编程新手,请不要太苛刻!

谢谢!

是这样的吗?

library(tidyverse)

df %>%
  # convert Date to a date, and Price to a number
  mutate(Date = as.Date(Date, format = "%d.%m.%Y"),
         Price = parse_number(Price)) %>%

  # for each Item, arrange by Date, tally, and calc price change
  group_by(Item) %>%
  arrange(Date) %>%
  mutate(appearance = row_number(),
         change = Price - lag(Price)) %>%
  ungroup() %>%

  # use the tally to reshape wider the date, price and change
  pivot_wider(names_from = appearance, 
              values_from = c(Date, Price, change),
              names_vary = "slowest")

结果

# A tibble: 4 × 11
  Item     Kg Date_1     Price_1 change_1 Date_2     Price_2 change_2 Date_3     Price_3 change_3
  <chr> <int> <date>       <dbl>    <dbl> <date>       <dbl>    <dbl> <date>       <dbl>    <dbl>
1 Apple     1 2022-02-01       1       NA 2022-02-16       2        1 2022-02-25     0.5     -1.5
2 Meat      1 2022-02-02       4       NA 2022-02-15       5        1 2022-02-15     3       -2  
3 Fish      1 2022-02-03       3       NA 2022-02-20       3        0 NA            NA        0  
4 Bread     1 2022-02-03       1       NA NA              NA        0 NA            NA        0  

源数据

df <- data.frame(
  stringsAsFactors = FALSE,
              Date = c("01.02.2022","02.02.2022",
                       "03.02.2022","03.02.2022","15.02.2022","15.02.2022",
                       "16.02.2022","20.02.2022","25.02.2022"),
              Item = c("Apple","Meat","Fish",
                       "Bread","Meat","Meat","Apple","Fish","Apple"),
             Price = c(".00",".00",".00",
                       ".00",".00",".00",".00",".00","[=12=].50"),
                Kg = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L)
)