r - 将数据帧的单列中的值向上移动,并在另一列中指定滞后

标签 r dataframe

我想将不同国家/地区的价格调整到一个时区,这意味着将一列向上移动另一列中声明的滞后(移动是时差)。

使用这样的示例数据:

example=data.frame(country=c("IT","IT","GR","GR","GR","TR","TR","TR","TR"), 
                   price=c(200,150,300,480,590,638,237,438,555), 
                   shift=c(0,0,1,1,1,2,2,2,2))

看起来像这样:
        country   price   shift
        IT        200     0
        IT        150     0
        GR        300     1
        GR        480     1
        GR        590     1
        TR        638     2
        TR        237     2
        TR        438     2
        TR        555     2

我想得到以下结果:
        country   price   shift
        IT        200     0
        IT        150     0
        GR        480     1
        GR        590     1
        GR        NA      1
        TR        438     2
        TR        555     2
        TR        NA      2
        TR        NA      2

我尝试使用此线程中的解决方案:
R: Shift values in single column of dataframe UP
但由于它使用一个滞后值,因此并不完全适用。

最佳答案

使用 dplyr::lead

library(dplyr)

example %>% 
  group_by(shift) %>% 
  mutate(price = lead(price, unique(shift)))

或使用 data.table::shift
library(data.table)

setDT(example)[, price := shift(.(price), type = "lead", n = shift), .(shift)][]

给予
#>   country price shift
#> 1 IT        200     0
#> 2 IT        150     0
#> 3 GR        480     1
#> 4 GR        590     1
#> 5 GR         NA     1
#> 6 TR        438     2
#> 7 TR        555     2
#> 8 TR         NA     2
#> 9 TR         NA     2

关于r - 将数据帧的单列中的值向上移动,并在另一列中指定滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58609995/

相关文章:

R ggplot2 : bar chart of a time series

r - 使用 dplyr 连接分组列以创建唯一键

python - 属性错误 : 'generator' object has no attribute 'to_sql' While creating datframe using generator

R:确定组内某些子组的最大值和最小值之间的差异

c++ - R代码或.R文件的DLL

python - Pandas:从 Pandas DataFrame 中选择两个日期之间的所有数据

python - Pyspark > Dataframe 将多个数组列分成多行,每行一个值

python - 在 Pandas 中找到连续两行的平均值

python - 如何使用 pandas 中的列表和索引之间的比较来删除列表中的项目?

r - 如何优雅地将日期时间从十进制转换为 "%d.%m.%y %H:%M:%S"?