1
我发布了一个问题,有关加入data.table中的列,其中一列(dep)具有条目的依赖信息。因此条目3依赖于标签为'40'的记录。然后,'匹配'列被分配条目所依赖的标签的标识符值。问题是张贴在这里:Comparing columns uptill certain index in R加入data.table与多个匹配
library(data.table)
trace <- data.table(id=1:10, dep=c(-1,45,40,47,0,45,43,42,45,45),
label=c(99,40,43,45,47,42,48,45,52,67), mark=rep("",10))
id dep label mark
1: 1 -1 99
2: 2 45 40
3: 3 40 43
4: 4 47 45
5: 5 0 47
6: 6 45 42
7: 7 43 48
8: 8 42 45
9: 9 45 52
10: 10 45 67
会导致
id dep label mark
1: 1 -1 99 1
2: 2 45 40 2
3: 3 40 43 2
4: 4 47 45 4
5: 5 0 47 5
6: 6 45 42 4
7: 7 43 48 3
8: 8 42 45 6
9: 9 45 52 8
10: 10 45 67 8
以下解决方案为我工作:
trace[, mark := trace[.(dep = dep, id = id), on=.(label = dep, id < id), mult="last", x.id]]
# if not found, use current id
trace[is.na(mark), mark := id ]
针对上述案例,对于重复我们使用的最最近的比赛。 然而,如果不是匹配到最后一个条目,如果我想保留的所有比赛,有没有办法得到类似这样的输出(其中最后和倒数第二项有多个依赖):
id dep label mark
1: 1 -1 99 1
2: 2 45 40 2
3: 3 40 43 2
4: 4 47 45 4
5: 5 0 47 5
6: 6 45 42 4
7: 7 43 48 3
8: 8 42 45 6
9: 9 45 52 4,8
10: 10 45 67 4,8
我不是关注这些依赖关系被记录的格式。使用MULT = “所有” 早期解决方案的一个稍微的改变,
trace[, mark := trace[.(dep = dep, id = id), on=.(label = dep, id < id), mult="all", toString(x.id)]]
结果在这个
id dep label mark
1: 1 -1 99 NA, NA, 2, NA, NA, 4, 3, 6, 4, 8, 4, 8
2: 2 45 40 NA, NA, 2, NA, NA, 4, 3, 6, 4, 8, 4, 8
3: 3 40 43 NA, NA, 2, NA, NA, 4, 3, 6, 4, 8, 4, 8
4: 4 47 45 NA, NA, 2, NA, NA, 4, 3, 6, 4, 8, 4, 8
5: 5 0 47 NA, NA, 2, NA, NA, 4, 3, 6, 4, 8, 4, 8
6: 6 45 42 NA, NA, 2, NA, NA, 4, 3, 6, 4, 8, 4, 8
7: 7 43 48 NA, NA, 2, NA, NA, 4, 3, 6, 4, 8, 4, 8
8: 8 42 45 NA, NA, 2, NA, NA, 4, 3, 6, 4, 8, 4, 8
9: 9 45 52 NA, NA, 2, NA, NA, 4, 3, 6, 4, 8, 4, 8
10: 10 45 67 NA, NA, 2, NA, NA, 4, 3, 6, 4, 8, 4, 8
它的工作对正常的测试案例。但是,对于实际的百万行记录 - 正如你所提到的 - 不起作用。 – Saltaf