通过找到价格的变化来获得变化率
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
如您所见,相同数量的相同产品的价格随时间随机变化。我想分析的是:
- 每个项目的变化率
- 变化发生的时间
这是理想的结果:
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)
)
更新: 结果我得到了一个奇怪的结果。有时,结果的最早日期显示在 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 |
如您所见,相同数量的相同产品的价格随时间随机变化。我想分析的是:
- 每个项目的变化率
- 变化发生的时间
这是理想的结果:
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)
)