我在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等,我已经完成了基本的例子,但是......学习曲线很陡峭.我真的很感激一些帮助:)
首先添加所有缺失的月份:
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)
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |