我有一個大的數據集 - 大約32mil行。我有關於電話號碼,電話的來源和目的地的信息。總結一個值出現在2列中任何一個的次數
對於每個電話號碼,我想要統計它出現的次數或者作爲起源或作爲目的地。
的示例數據表如下:
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告知電話= 1出現1,電話= 2 1出現,電話= 3,4和5分別出現2倍。
請注意,它不是'for'循環,是獲得所需的列順序問題*本身*,但你如何執行操作。 – lmo
也許你應該考慮在這裏使用圖論,用igraph軟件包(電話號碼作爲節點,呼叫作爲有向邊緣)。 – Frank