R 通过减少数据表来排序
其中第3行至第6行无法推断,并且R 通过减少数据表来排序,r,join,data.table,R,Join,Data.table,其中第3行至第6行无法推断,并且foo是需要保留的其他变量的替身 例如,在data.table中,使用巧妙的连接组合可以有效地实现这一点吗 这个问题有点类似于一个问题,但我已经修改了情况,使它更清楚 在我看来,您需要图形算法的帮助。如果要从1002开始,可以尝试: > head(ans) id old new foo 1: 1 1002 1007 -0.7889534 2: 1 1007 1015 1.1397910 3: 1 1015 1022 -1
foo
是需要保留的其他变量的替身
例如,在data.table中,使用巧妙的连接组合可以有效地实现这一点吗
这个问题有点类似于一个问题,但我已经修改了情况,使它更清楚 在我看来,您需要图形算法的帮助。如果要从
1002
开始,可以尝试:
> head(ans)
id old new foo
1: 1 1002 1007 -0.7889534
2: 1 1007 1015 1.1397910
3: 1 1015 1022 -1.2193670
4: 1 1022 1024 1.2039050
5: 1 1024 1026 0.4388586
6: 2 1744 1750 -0.1368320
这个解决方案对我来说很有意义!不存在
t$id
,因为t
对所有这些都有效,id只设置各自的起点。如果我不想手工操作,我如何将id
放入其中?类似于I[,t[old%in%subcomponent(g,start,“out”)],by=(id)]
Yes!但是是否可以将每个序列的数量限制为n
?看起来这也需要在t[old%in%…]
命令中完成。@bumblebee您只想返回第一行n
行吗?是的,谢谢您将其添加到您的解决方案中。我将您的上一步rbindlist(setNames(lappy(…))
与chinsoon12的建议I[,t[…],by=(id)]
进行了比较,速度相当。谢谢你们两个!
> head(ans)
id old new foo
1: 1 1002 1007 -0.7889534
2: 1 1007 1015 1.1397910
3: 1 1015 1022 -1.2193670
4: 1 1022 1024 1.2039050
5: 1 1024 1026 0.4388586
6: 2 1744 1750 -0.1368320
require(igraph)
g <- graph_from_edgelist(as.matrix(t[,1:2]))
t[old %in% subcomponent(g,"1002","out")]
# 1: 1002 1007 -0.78895338
# 2: 1007 1015 1.13979100
# 3: 1015 1022 -1.21936662
# 4: 1022 1024 1.20390482
# 5: 1024 1026 0.43885860
# ---
#191: 1981 1988 -0.22054875
#192: 1988 1989 -0.22812175
#193: 1989 1995 -0.04687776
#194: 1995 2000 2.41349730
#195: 2000 2002 -1.23425666
n <- 5
rbindlist(
setNames(lapply(i$start, function(x) t[old %in% subcomponent(g,x,"out")[1:n]]), i$id),
idcol="id")
# id old new foo
# 1: 1 1002 1007 -0.7889534
# 2: 1 1007 1015 1.1397910
# 3: 1 1015 1022 -1.2193666
# 4: 1 1022 1024 1.2039048
# 5: 1 1024 1026 0.4388586
# 6: 2 1744 1750 -0.1368320
# 7: 2 1750 1758 0.3331686
# 8: 2 1758 1763 1.3040357
# 9: 2 1763 1767 -1.1715528
#10: 2 1767 1775 0.2841251
#11: 3 1656 1659 -0.1556208
#12: 3 1659 1663 0.1663042
#13: 3 1663 1669 0.3781835
#14: 3 1669 1670 0.2760948
#15: 3 1670 1675 0.3745026