我的数据结构如下:
rad_1 | 分区编号 | 间隔 |
---|---|---|
1 | 2 | 4 |
1 | 3 | 2 |
2 | 3 | 3 |
我想按划分和间隔扩展行。如果间隔为 4 并且除法为 2,则将行扩展八倍,因为 4 x 2 是 8。类似地,如果间隔为 2 并且除法为 3,则将行扩展 6 倍,因为 2 x 3 是 6。
我尝试过的代码:
dt1[, row_index := 1:.N]
dt1 <- dt1[rep(seq_len(.N), dt1$division), ]
dt1[, new_row := seq_len(division) - 1 + interval * (row_index - 1), by = row_index]
预期输出:
rad_1 | 分区编号 | 间隔 |
---|---|---|
1 | 2 | 4 |
1 | 2 | 4 |
1 | 2 | 4 |
1 | 2 | 4 |
1 | 2 | 4 |
1 | 2 | 4 |
1 | 2 | 4 |
1 | 2 | 4 |
1 | 3 | 2 |
1 | 3 | 2 |
1 | 3 | 2 |
1 | 3 | 2 |
1 | 3 | 2 |
1 | 3 | 2 |
2 | 3 | 3 |
2 | 3 | 3 |
2 | 3 | 3 |
2 | 3 | 3 |
2 | 3 | 3 |
2 | 3 | 3 |
2 | 3 | 3 |
2 | 3 | 3 |
2 | 3 | 3 |
我们可以使用
req(., times=)
为此:
dt1[rep(seq(.N), times = division_num * interval),]
# rad_1 division_num interval
# <int> <int> <int>
# 1: 1 2 4
# 2: 1 2 4
# 3: 1 2 4
# 4: 1 2 4
# 5: 1 2 4
# 6: 1 2 4
# 7: 1 2 4
# 8: 1 2 4
# 9: 1 3 2
# 10: 1 3 2
# ---
# 14: 1 3 2
# 15: 2 3 3
# 16: 2 3 3
# 17: 2 3 3
# 18: 2 3 3
# 19: 2 3 3
# 20: 2 3 3
# 21: 2 3 3
# 22: 2 3 3
# 23: 2 3 3