来自数据提供商的季度数据存在的问题是,对于某些变量,季度数据值实际上是年初至今的数据。这意味着这些值是所有前几个季度的总和(Q2 = Q1 + Q2,Q3 = Q1 + Q2 + Q3,......)。 原始数据的结构如下所示:
#include <fstream>
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
ifstream infile("input.txt"); // contains apple, orange, banana in separate lines
istream_iterator<string> eos;
istream_iterator<string> input(infile);
const vector<string> stuff(input, eos);
const vector<string> a_stuff(stuff.copy_if([](const string& s) { return s[0] == 'a'; }));
return 0;
}
为了计算季度值,我需要从Q2,Q3和Q4中减去上一季度。
我使用 library(data.table)
library(plyr)
dt.quarter.test <- structure(list(Year = c(2000L, 2000L, 2000L, 2000L, 2001L, 2001L, 2001L, 2001L)
, Quarter = c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L)
, Data.Year.to.Date = c(162, 405, 610, 938, 331, 1467, 1981, 2501))
, .Names = c("Year", "Quarter", "Data.Year.to.Date"), class = c("data.table", "data.frame"), row.names = c(NA, -8L))
包中的ddply
函数设法获得了预期的结果。
plyr
但我对命令并不满意,因为它看起来很笨拙,我想得到一些关于如何改进它的信息,特别是在data.table中直接做。
答案 0 :(得分:0)
以下是data.table
语法,您可能会发现data.table cheat sheet有用:
library(data.table)
dt.quarter.test[, Data.Quarterly := Data.Year.to.Date - shift(Data.Year.to.Date, fill = 0), Year][]
# Year Quarter Data.Year.to.Date Data.Quarterly
# 1: 2000 1 162 162
# 2: 2000 2 405 243
# 3: 2000 3 610 205
# 4: 2000 4 938 328
# 5: 2001 1 331 331
# 6: 2001 2 1467 1136
# 7: 2001 3 1981 514
# 8: 2001 4 2501 520