【发布时间】:2018-03-02 22:52:45
【问题描述】:
我正在寻找一种简单而优雅的方式来实现这一点。
所以如果我有数据集x 并且关系是A -> B -> Z -> Y 和D -> H -> G,我想创建数据集y。不幸的是,它们不一定是有序的:
> x <- data.frame(
+ from = as.character(c("A", "E", "B", "D", "H", "Z")),
+ to = as.character(c("B", "E", "Z", "H", "G", "Y")))
>
> y <- data.frame(
+ from = as.character(c("A", "E", "B", "D", "H", "Z")),
+ to = as.character(c("Y", "E", "Y", "G", "G", "Y")))
>
> x
from to
1 A B
2 E E
3 B Z
4 D H
5 H G
6 Z Y
> y
from to
1 A Y
2 E E
3 B Y
4 D G
5 H G
6 Z Y
我有一个相当大的数据集(目前有 500k 行;将来会增长)并且实际上关心性能;我不确定是否有任何其他方法可以在没有 for 循环甚至矢量化/并行化过程的情况下执行此操作。
我正在考虑拆分和删除 from == to 处的所有行,或者创建一个指示器来跳过某些行,这样循环就不必每次都遍历整个数据集。
如果我确实创建了一个循环,我也想知道断点应该是什么;我不确定如何定义循环何时停止。
任何建议,将不胜感激。谢谢!
【问题讨论】:
-
看起来像是
igraph的案例 -
@akrun 以前从未听说过它,而且文档看起来相当庞大——您对从哪里开始查找或从哪个函数开始有什么建议吗?感谢您的建议!