我有一个时间序列data.frame,其中所有值都低于彼此。但是在每个日期都会有更多的案例经常回归。根据时间序列,我添加了一些带有一些计算的列。这些计算是针对具体情况完成的。但是对于这些计算,我需要该案例的前一个日期的值。我现在知道要使用哪个功能。任何人都可以指点我网上的某个功能或示例吗?谢谢!
要清楚,这就是我的意思。在日期1,案例'a'的旧值(在得分之前)是1200.基于得分1,新值变为1250.在日期2,我希望将该新值1250放置在列'旧值'中(并且要进行一些计算以获得新值,新值必须在日期4左右再次放入de column旧值等等)。对于案例B相同。因此,在日期1之后得分的新值是1190,并且必须在第3天(在日期2,现在是案例B)处于正确的行中,等等于1000个案例和日期。
date name_case score old_value new_value
1 a 1 1200 1250
1 b 2 1275 1190
1 c 1 1300 1310
2 a 3 1250
2 c 1 1310
3 B 1 1190
答案 0 :(得分:0)
也许会这样做。假设我们从:
开始> dat
date name_case score old_value new_value
1 1 a 1 1200 1250
2 1 b 2 1275 1190
3 1 c 1 1300 1310
4 2 a 3 NA NA
5 2 c 1 NA NA
6 3 b 1 NA NA # note ... fixed cap issue
然后使用new_value的值创建一个子集:
dat1 <- dat[ !is.na(dat$old_value), ]
然后在new_values
的{{1}}
match
替换NA old_values与name_case
的结果
dat[ is.na(dat$old_value) , "old_value" ] <-
dat1$new_value[ match(dat[ !is.na(dat$old_value) ,"name_case" ],
dat1$name_case)]
match
生成一个数字向量,用于索引new_values
。
> dat
date name_case score old_value new_value
1 1 a 1 1200 1250
2 1 b 2 1275 1190
3 1 c 1 1300 1310
4 2 a 3 1250 NA
5 2 c 1 1190 NA
6 3 B 1 1310 NA