我有一组时间序列,我想在特定的时间间隔内相对于它们的值对它们进行缩放。那样,每个系列在当时都会达到1.0,并且按比例变化。相对于每个组中的值的比例(通过dplyr)
我不知道如何用dplyr做到这一点。
下面是使用一个for循环的工作示例:
library(dplyr)
data = expand.grid(
category = LETTERS[1:3],
year = 2000:2005)
data$value = runif(nrow(data))
# the first time point in the series
baseYear = 2002
# for each category, divide all the values by the category's value in the base year
for(category in as.character(levels(factor(data$category)))) {
data[data$category == category,]$value = data[data$category == category,]$value/data[data$category == category & data$year == baseYear,]$value[[1]]
}
编辑:修饰的问题,使得基准时间点不是可转位。有时候,“时间”栏实际上是一个因素,不一定是序数。
另一种方法是使用'first'和'order_by'。通过使用'order_by',每个类别的最低年份应该在第一行。 'mutate(group_by(data,category),out = order_by(year,value/first(value)))%>%arrange(category)' – jazzurro 2014-11-25 02:00:35
Thanks!如果我想按照年份中位数进行缩放,那么索引不起作用会怎样? – sharoz 2014-11-25 02:02:29
@sharoz你的意思是'mutate(value = value/median(year))' – 2014-11-25 11:34:12