【发布时间】:2017-02-22 23:51:44
【问题描述】:
我有一个大型数据集 - 大约 3200 万行。我有关于电话号码、呼叫来源和目的地的信息。
对于每个电话号码,我想计算它作为 Origin 或 Destination 出现的次数。
示例数据表如下:
library(data.table)
dt <- data.table(Tel=seq(1,5,1), Origin=seq(1,5,1), Destination=seq(3,7,1))
Tel Origin Destination
1: 1 1 3
2: 2 2 4
3: 3 3 5
4: 4 4 6
5: 5 5 7
我有工作代码,但我的数据需要很长时间,因为它涉及 for 循环。如何优化它?
这里是:
for (i in unique(dt$Tel)){
index <- (dt$Origin == i | dt$Destination == i)
dt[dt$Tel ==i, "N"] <- sum(index)
}
结果:
Tel Origin Destination N
1: 1 1 3 1
2: 2 2 4 1
3: 3 3 5 2
4: 4 4 6 2
5: 5 5 7 2
其中 N 表示 Tel=1 出现 1 次,Tel=2 出现 1 次,Tel=3,4 和 5 各出现 2 次。
【问题讨论】:
-
请注意,问题不是
for循环本身,而是您执行操作的方式。 -
也许你应该考虑在这里使用图论,使用 igraph 包(电话号码作为节点,呼叫作为有向边)。
标签: r data.table