我有一个数据帧,看起来是这样的:

Year <- c("2004", "2004", "2004", "2005", "2005", "2005", "2006", "2006", "2006")
Province <- c("0101", "0102", "0103", "0101", "0102", "0103", "0101", "0102", "0103")
Price <- c("1,02", "1,50", "1,70", "1,25", "1,56", "1,78", "1,32", "1,65", "1,88")

Data <- data.frame(Year, Province, Price) 

Year Province Price
2004 0101     1,02
2004 0102     1,50
2004 0103     1,70
2005 0101     1,25
2005 0102     1,56
2005 0103     1,78
2006 0101     1,32
2006 0102     1,65
2006 0103     1,88

我现在正在try 创建一个变量来描述每个省的价格与上一时期的差异.更可取的结果是:

Year Province Price Diff_Price
2004 0101     1,02  NA
2004 0102     1,50  NA
2004 0103     1,70  NA
2005 0101     1,25  0,23
2005 0102     1,56  0,06
2005 0103     1,78  0,08
2006 0101     1,32  0,07
2006 0102     1,65  0,09
2006 0103     1,88  0,1

我之前找到了一个类似的帖子,但这只针对一个省,也许现在也有更容易的解决方案:Creating a delta column to plot time series differences in R

推荐答案

在价格中,使用type.convert将逗号转换为句点并转换为数字,然后使用diff.

library(dplyr)

Data %>%
  mutate(Price = type.convert(Price, as.is = TRUE, dec = ","),
         Price_Diff = diff(c(NA, Price)), .by = Province)

给予:

  Year Province Price Price_Diff
1 2004     0101  1.02         NA
2 2004     0102  1.50         NA
3 2004     0103  1.70         NA
4 2005     0101  1.25       0.23
5 2005     0102  1.56       0.06
6 2005     0103  1.78       0.08
7 2006     0101  1.32       0.07
8 2006     0102  1.65       0.09
9 2006     0103  1.88       0.10

这是一个基本解决方案

Data |>
  transform(Price = type.convert(Price, as.is = TRUE, dec = ",")) |>
  transform(Price_Diff = ave(Price, Province, FUN = \(x) c(NA, diff(x))))

注意事项

问题中的输入数据代码行中存在错误,因此我们使用以下代码

Year <- c("2004", "2004", "2004", "2005", "2005", "2005", "2006", "2006", "2006")
Province <- c("0101", "0102", "0103", "0101", "0102", "0103", "0101", "0102", "0103")
Price <- c("1,02", "1,50", "1,70", "1,25", "1,56", "1,78", "1,32", "1,65", "1,88")
Data <- data.frame(Year, Province, Price) 

R相关问答推荐

单击 map 后,将坐标复制到剪贴板

R中具有gggplot 2的Likert图,具有不同的排名水平和显示百分比

判断字符串中数字的连续性

隐藏e_mark_line的工具提示

整数成随机顺序与约束R?

用值序列对行进行子集化,并标识序列开始的列

R-更新面内部的栅格值

在另存为PNG之前隐藏htmlwidget绘图元素

以字符格式导入的ExcelElectron 表格日期列标题

在数据帧列表上绘制GGPUP

将数据集旋转到长格式,用于遵循特定名称模式的所有变量对

按两个因素将观测值分组后计算单独的百分比

在r中整理图例和堆叠图的问题

将边列表转换为路径长度列表

子样本间系数检验的比较

R dplyr::带有名称注入(LHS of:=)的函数,稍后在:=的RHS上引用

R中的交叉表

有没有一种方法可以用非标准参数编写一个定制的ggploy主题函数?

我应该如何解决Raster程序包中未对齐的色条记号?

文本标签 colored颜色 与FiveThirty8主题不匹配