这是一个非常古老的线程,但作为参考,这里有一个data.table
使用与@Ram 相同的数据的解决方案:
structure(list(Date = structure(c(10957, 10987, 10988, 11015, 11017, 11047, 11087, 11099, 11112, 11141, 11168, 11319, 11321), class = "Date"), Value = c(10, 10.1, 10.2, 11, 10, 24.1, 510, 522, 604, 10.1, 7.2, 11, 3)), .Names = c("Date", "Value"), row.names = c(NA, -13L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x00000000001b0788>)
它本质上是一个使用该data.table::month
功能的单线:
library(data.table)
setDT(df)[ , diff(Value) / Value[1], by= .(month(Date))]
相对于每个月的第一个记录日,这将产生变化。如果首选相对于最后一天的更改,则中间的表达式应更改为diff(Value) / Vale[2]
。