【发布时间】:2021-11-28 17:52:21
【问题描述】:
我确定这是一个愚蠢的问题......但我环顾四周,似乎找不到任何东西。
假设我有两张桌子:
a <- data.table(row_id = 1:12)
b <- data.table(start_row = c(1,5,10),end_row = c(3,7,11),value = c("a","b","c"))
> a
row_id
1: 1
2: 2
3: 3
4: 4
5: 5
6: 6
7: 7
8: 8
9: 9
10: 10
11: 11
12: 12
> b
start_row end_row value
1: 1 3 a
2: 5 7 b
3: 10 11 c
我想加入使用来自b 的行索引,将value 插入a,以生成如下内容:
> c
row_id value
1: 1 a
2: 2 a
3: 3 a
4: 4 <NA>
5: 5 b
6: 6 b
7: 7 b
8: 8 <NA>
9: 9 <NA>
10: 10 c
11: 11 c
12: 12 <NA>
我现在正在做的是使用 for 循环,这很慢:
for (i in 1:nrow(s)) {
a[row_id >= b[i,start_row] & row_id <= b[i,end_row],value := b[i,value]]
}
我考虑过 dcasting b 进入一个长形式的排序然后加入,但我真正需要的是在加入之前生成开始行和结束行之间的序列。欢迎提出任何建议!
【问题讨论】:
标签: r data.table