将缺失的行添加到 data.table
Add missing rows to data.table
假设我的选项值是 1 到 9。
我有以下 data.table:
> group = c(1,1,1,2,2,2,2,3,3,3,3,4,4)
> value = c(2,3,4,5,6,7,8,2,4,6,7,4,9)
> a=data.table(group=group,value=value)
> a
group value
1: 1 2
2: 1 3
3: 1 4
4: 2 5
5: 2 6
6: 2 7
7: 2 8
8: 3 2
9: 3 4
10: 3 6
11: 3 7
12: 4 4
13: 4 9
现在,我想为每个组添加缺失的行。 IE。对于第 1 组,我错过了值 1 和 5-9。但是,如果我和 CJ 一起做:
> b=a[CJ(group=group,value=value,unique=TRUE),on=.(group,value)]
> b
group value
1: 1 2
2: 1 3
3: 1 4
4: 1 5
5: 1 6
6: 1 7
7: 1 8
8: 1 9
9: 2 2
10: 2 3
11: 2 4
12: 2 5
13: 2 6
14: 2 7
15: 2 8
16: 2 9
17: 3 2
18: 3 3
19: 3 4
20: 3 5
21: 3 6
22: 3 7
23: 3 8
24: 3 9
25: 4 2
26: 4 3
27: 4 4
28: 4 5
29: 4 6
30: 4 7
31: 4 8
32: 4 9
group value
我错过了值 1。因为它根本不在此数据 table 中。但我仍然认为这是我的选择之一。我怎样才能做到这一点?
如@Roland 的评论所示,在CJ()
中使用value = value
,而不是
value = seq_len(max(value))
或在 value
列中指定您想要的范围。
因此,您只需将您的尝试修改为:
b = a[CJ(group = group, value = value, unique = TRUE), on = .(group,value)]
成为:
b = a[CJ(group = group, value = seq_len(max(value)), unique = TRUE),
on = .(group,value)]
假设我的选项值是 1 到 9。 我有以下 data.table:
> group = c(1,1,1,2,2,2,2,3,3,3,3,4,4)
> value = c(2,3,4,5,6,7,8,2,4,6,7,4,9)
> a=data.table(group=group,value=value)
> a
group value
1: 1 2
2: 1 3
3: 1 4
4: 2 5
5: 2 6
6: 2 7
7: 2 8
8: 3 2
9: 3 4
10: 3 6
11: 3 7
12: 4 4
13: 4 9
现在,我想为每个组添加缺失的行。 IE。对于第 1 组,我错过了值 1 和 5-9。但是,如果我和 CJ 一起做:
> b=a[CJ(group=group,value=value,unique=TRUE),on=.(group,value)]
> b
group value
1: 1 2
2: 1 3
3: 1 4
4: 1 5
5: 1 6
6: 1 7
7: 1 8
8: 1 9
9: 2 2
10: 2 3
11: 2 4
12: 2 5
13: 2 6
14: 2 7
15: 2 8
16: 2 9
17: 3 2
18: 3 3
19: 3 4
20: 3 5
21: 3 6
22: 3 7
23: 3 8
24: 3 9
25: 4 2
26: 4 3
27: 4 4
28: 4 5
29: 4 6
30: 4 7
31: 4 8
32: 4 9
group value
我错过了值 1。因为它根本不在此数据 table 中。但我仍然认为这是我的选择之一。我怎样才能做到这一点?
如@Roland 的评论所示,在CJ()
中使用value = value
,而不是
value = seq_len(max(value))
或在 value
列中指定您想要的范围。
因此,您只需将您的尝试修改为:
b = a[CJ(group = group, value = value, unique = TRUE), on = .(group,value)]
成为:
b = a[CJ(group = group, value = seq_len(max(value)), unique = TRUE),
on = .(group,value)]