new*_*bie 1 r reshape2 dplyr data.table
添加可复制性:
data.frame(
product=c(rep("x",2),rep("y",3)),
price_category_from=c(10,20,10,20,30),
price=c(30,31,31,30,27)
Run Code Online (Sandbox Code Playgroud)
)
如下所示,我有一个表格,我想对其进行分组product并更改price_category_from列的值以找到最小值price。
product price_category_from price
x 10 30
x 20 31
y 10 31
y 20 30
y 30 27
Run Code Online (Sandbox Code Playgroud)
如下所示,结果表应包含price.new用于更改列中值的最小price_category_from列。例如,price.new在产品的两行中x都是30因为类别的后续price值price_category_from更大。而对于产品y,每个后续price_category_from类别的最小值都会发生变化,因为下一个price值较小。
中的值price_category_from是按递增顺序排列的间隔。
product price_category_from price price.new
x 10 30 30
x 20 31 30 **
y 10 31 31
y 20 30 30
y 30 27 27
Run Code Online (Sandbox Code Playgroud)
我希望我能够解释这个问题。我非常感谢您的帮助(最好是data.table)。非常感谢您提前。
您可以使用cummin来获得 cumultive 最小值(所有值的最小值,直到给定值)
library(data.table)
setDT(df)
df[, price.new := cummin(price), by = product]
df
# product price_category_from price price.new
# 1: x 10 30 30
# 2: x 20 31 30
# 3: y 10 31 31
# 4: y 20 30 30
# 5: y 30 27 27
Run Code Online (Sandbox Code Playgroud)
或与基地 R
df$price.new <- with(df, ave(price, product, FUN = cummin))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |