讓說,我們有以下如何按組更新特定行的常量值?
library(data.table); library(zoo)
dt <- data.table(grp = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3), period = seq.Date(from = as.Date('2014-01-01'), to = as.Date('2014-05-01'), by = 'month'), x=c(1:15), y=c(11:25))
dt[, period:=as.yearmon(period, '%Y-%m-%d')]
回報,
grp period x y
1: 1 Jan 2014 1 11
2: 1 Feb 2014 2 12
3: 1 Mar 2014 3 13
4: 1 Apr 2014 4 14
5: 1 May 2014 5 15
6: 2 Jan 2014 6 16
7: 2 Feb 2014 7 17
8: 2 Mar 2014 8 18
9: 2 Apr 2014 9 19
10: 2 May 2014 10 20
11: 3 Jan 2014 11 21
12: 3 Feb 2014 12 22
13: 3 Mar 2014 13 23
14: 3 Apr 2014 14 24
15: 3 May 2014 15 25
我想更新使用與March 2014
值列x
和y
。我希望將如下返回:
grp period x y
1: 1 Jan 2014 1 11
2: 1 Feb 2014 2 12
3: 1 Mar 2014 3 13
4: 1 Apr 2014 3 13
5: 1 May 2014 3 13
6: 2 Jan 2014 6 16
7: 2 Feb 2014 7 17
8: 2 Mar 2014 8 18
9: 2 Apr 2014 8 18
10: 2 May 2014 8 18
11: 3 Jan 2014 11 21
12: 3 Feb 2014 12 22
13: 3 Mar 2014 13 23
14: 3 Apr 2014 13 23
15: 3 May 2014 13 23
我曾嘗試下面的代碼,但它只能從row 3
中的值。
dt[which(period > dt[3, period]),`:=`(x=dt[3, x], y = dt[3, y]), by=grp]
能否請您給點建議?
http://stackoverflow.com/questions/7735647/replacing-nas-with-latest-non-na-value – akrun
的可能的複製也許還通過= grp] $ V1,\':= \'(x = x [1],y = y [1]),by = grp]'(如果'dt'被排序) 或 'dt [period> =「Mar 2014」,\':= \'(x = x [1],y = y [1]),by = grp]'? – lukeA