gpt4 book ai didi

r - 计算产品价格变化后的天数

转载 作者:行者123 更新时间:2023-12-05 00:45:18 25 4
gpt4 key购买 nike

我正在尝试向我的数据集添加一个变量,它计算每个产品自上次价格变化以来的天数。

这是数据的样子:

df <- read.table(text = "productid date price
1 2019-09-01 3.99
1 2019-09-02 6.99
1 2019-09-03 6.99
2 2019-09-01 6.99
2 2019-09-02 6.99
2 2019-09-03 3.99
2 2019-09-04 3.99
2 2019-09-05 6.99
3 2019-09-01 3.99
3 2019-09-02 3.99
3 2019-09-03 3.99", header=TRUE)

我尝试了以下方法:

df$price_count <- ave(seq_along(df$productid, df$date), d1$productid, df$price, FUN = seq_along)

但是,如果同一产品的价格更改为之前为该产品设定的价格,则此方法不会从 1 开始计数。例如第 8 行:productid 2 在 2019 年 9 月 5 日的价格为 6.99。

我希望生成的数据框是:
df_result <- read.table(text = "productid date price count_days_since_price
1 2019-09-01 3.99 1
1 2019-09-02 6.99 1
1 2019-09-03 6.99 2
2 2019-09-01 6.99 1
2 2019-09-02 6.99 2
2 2019-09-03 3.99 1
2 2019-09-04 3.99 2
2 2019-09-05 6.99 1
3 2019-09-01 3.99 1
3 2019-09-02 3.99 2
3 2019-09-03 3.99 3", header=TRUE)

我感谢任何帮助,谢谢!

最佳答案

1) 基础 R 这仅使用基础 R。它使用 ave通过 productid 应用指定的功能该函数使用的地方 sequence适用于 rle生成价格变化后的天数。

df_result2 <- transform(df, count_days_since_price = 
as.integer(ave(price, productid, FUN = function(x) sequence(rle(x)$lengths))))

identical(df_result, df_result2)
## [1] TRUE

2) rleid 我们可以简化使用 rleid来自数据表:
library(data.table)

df_result3 <- transform(df, count_days_since_price =
as.integer(ave(price, rleid(productid, price), FUN = seq_along)))

identical(df_result, df_result3)
## [1] TRUE

关于r - 计算产品价格变化后的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57805428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com