【发布时间】:2021-03-31 20:18:12
【问题描述】:
我对编程还是很陌生,并且遇到了一些我无法找到解决方案的问题,尽管可能部分原因是我不知道如何表达我的搜索查询(英语是'不是我的母语......)。无论如何,我有一个格式如下的数据集(简化;有更多年和数周的数据,还有更多商品):
| GoodID | Year | Week | Price |
|---|---|---|---|
| 1 | 2015 | 3 | X1 |
| 1 | 2015 | 4 | Y1 |
| 1 | 2016 | 3 | Z1 |
| 1 | 2016 | 4 | U1 |
| 1 | 2017 | 3 | V1 |
| 1 | 2017 | 4 | W1 |
| 2 | 2015 | 3 | X2 |
| 2 | 2015 | 4 | Y2 |
| 2 | 2016 | 3 | Z2 |
| 2 | 2016 | 4 | U2 |
我想做的是添加一列,显示某种商品一年前的价格。也就是说,它应该显示同一周但一年前的价格。
| GoodID | Year | Week | Price | Price last year |
|---|---|---|---|---|
| 1 | 2015 | 3 | X1 | NA |
| 1 | 2015 | 4 | Y1 | NA |
| 1 | 2016 | 3 | Z1 | X1 |
| 1 | 2016 | 4 | U1 | Y1 |
| 1 | 2017 | 3 | V1 | Z1 |
| 1 | 2017 | 4 | W1 | U1 |
| 2 | 2015 | 3 | X2 | NA |
| 2 | 2015 | 4 | Y2 | NA |
| 2 | 2016 | 3 | Z2 | X2 |
| 2 | 2016 | 4 | U2 | Y2 |
我正在使用 tidyverse。以前我对这些年来的平均很好,这很容易:
df <- df %>%
group_by(GoodID, week)%>%
mutate(avgprice = mean(Price)) %>%
ungroup()
但是当我想将价格与一年前的价格进行比较时,我完全迷失了。听起来应该有一个简单的解决方案,比如
mutate(lastprice = Year-1$Price)
但显然这行不通,我不知道该怎么说。我试图过滤数据
df <- df %>%
filter(year == 2017) %>%
mutate(lastprice = Price)
df <- df %>%
filter(year == 2016) %>%
mutate(lastprice = Price)
但这当然只会导致第一次尝试清除所有其他年份的数据条目。
有没有人对我如何做这件事有建议?谢谢!
【问题讨论】: