给定许多唯一ID的时间序列,我需要每个时期的前100个增量

rju*_*ney 1 analytics r

我在TSV中有一系列时间数据,如下所示:

ID \t Date \t Value
-------------------------------
1234567 \t 2009-01-01T00:00:00.000Z \t 121
12131 \t 2009-06-01T00:00:00.000Z \t 151
12131 \t 2009-07-01T00:00:00.000Z \t 15153
...
Run Code Online (Sandbox Code Playgroud)

它很容易适应RAM,但对于Excel来说太大了.

每个ID每月有一个值,但并非所有ID都有12个月的条目.

数据跨越12个月,但并非所有ID都有12个月.我想查看每个ID的数据,如果上个月有一个条目,请将当前月减去上个月并将其存储在新列中以获得增量.如果前一个月没有条目,则返回0.然后,对于每个月,我希望这些增量的前100个正面和负面以及ID.

我想在R中这样做,因为它在Excel中很难并且它一直在崩溃.我安装了R,Rattle等,我已经完成了基本的例子,但是......学习曲线很陡峭.我真的很感激一些帮助:)

had*_*ley 7

首先添加所有缺失的月份:

all_combs <- expand.grid(
  ID = unique(data$ID),
  Date = unique(data$Date))

data <- merge(data, all_combs, by = c("ID", "Date"), all = T)
# Ensure data ordered by date
data <- data[with(data, order(ID, Date)), ]
Run Code Online (Sandbox Code Playgroud)

然后添加一列增量(使用diff计算)

library(plyr)
data <- ddply(data, "ID", transform, delta = c(NA, diff(Value)))
Run Code Online (Sandbox Code Playgroud)

最后,删除缺失的增量,按其值排序并提取每个组中的顶部和底部10.

changed <- subset(data, !is.na(delta))
changed <- changed[with(changed, order(ID, delta)), ]

# Select top 100 for each
top10 <- ddply(changed, "ID", function(df) {
 rbind(head(df, 10), tail(df, 10))
})
Run Code Online (Sandbox Code Playgroud)