我有一个像下面的data.table,我需要用
((V1 [Day + 1:Day + 7] 第2行的说明: 请帮助我,因为我在R方面的基本技能会很痛苦
预先感谢。_______date________|_V1__|V2_to_build
row1:2019-01-01_____|.10...| 2/7
row2:2019-01-02_____|...5...| 0/7
row3:2019-01-03_____|.30...| 3/7
row4:2019-01-04_____|.55...|
row5:2019-01-05_____|.21...|
row6:2019-01-06_____|.51...|
row7:2019-01-07_____|.10...|
row8:2019-01-08_____|..8...|
row9:2019-01-09_____|.35...|
row10:2019-01-10____|..4...|
rowZ:2019-01-50_____|.200..|
V2[row1]= 2/7 => (5<10 = True ,30<10 = False, 55<10 = False, 21<10 = False, 51<10 = False, 10<10 = False, 8<10 = True)
V2[row2] = 0/7 => (30<5 = False, 55<5 = False, 21<5 = False, 51<5 = False, 10<5 = False, 8< 5 = False)
答案 0 :(得分:1)
您可以按以下方式使用来自data.table
的非等额联接:
DT[, V2_to_build :=
DT[.(start=date, end=date+7L, val=V1), on=.(date>start, date<=end, V1<val),
allow.cartesian=TRUE,
by=.EACHI, .(V2=.N / 7)]$V2
]
输出:
date V1 V2_to_build
1: 2019-01-01 10 0.2857143
2: 2019-01-02 5 0.0000000
3: 2019-01-03 30 0.5714286
4: 2019-01-04 55 0.8571429
5: 2019-01-05 21 0.4285714
6: 2019-01-06 51 0.5714286
7: 2019-01-07 10 0.2857143
8: 2019-01-08 8 0.1428571
9: 2019-01-09 35 0.1428571
10: 2019-01-10 4 0.0000000
数据:
DT <- fread("date|V1
2019-01-01|10
2019-01-02|5
2019-01-03|30
2019-01-04|55
2019-01-05|21
2019-01-06|51
2019-01-07|10
2019-01-08|8
2019-01-09|35
2019-01-10|4")
DT[, date := as.Date(date, format="%Y-%m-%d")]