2016-01-13 44 views
0

我研究了「批量變量」,但我仍然不完全滿意他們的使用。R中日期之間的時間,分解成子數據框

我有一個數據框,列中填充了不同的電話號碼。例如:

111-111-1111 
111-111-1111 
222-222-2222 
222-222-2222 
222-222-2222 
222-222-2222 
333-333-3333 
333-333-3333 
333-333-3333 

而另一列分別顯示調用的日期。例如:

09/01/15 
09/02/15 
09/03/15 
09/04/15 
09/05/15 
09/06/15 
09/07/15 
09/08/15 
09/09/15 

我想了解有多少天有每個移動設備電話號碼撥打電話之間的視圖。當然,這個例子非常簡單。但是,我有一個包含27,000個條目的數據集。我需要幫助創建批量變量和循環(如有必要)。

我使用「lubridate」包讀取日期和「plyr」包的計數函數這是我感興趣的,所以我可以看看這個函數重複多少次。

目標:查找呼叫1和呼叫i + 1之間呼叫1和呼叫2之間,呼叫2和呼叫3之間的平均時間(天)。

我是一個非常新的R用戶。我已經廣泛地尋找解決這類問題的方法。感謝任何願意幫助的人。

回答

1

隨着庫dplyr,你可以做這樣的事情:

library(dplyr) 
df %>% group_by(phone) %>% mutate(daysBetweeenCalls = as.numeric(difftime(date, lag(date), units = 'days'))) 

確保日期字段中的日期格式。你可以做這樣的事情:

df$date <- as.Date(df$date, format = '%m/%d/%Y') 

輸出將是如下:

Source: local data frame [9 x 3] 
Groups: phone [3] 

     phone  date daysBetweeenCalls 
     (chr)  (date)    (dbl) 
1 111-111-1111 0015-09-01    NA 
2 111-111-1111 0015-09-02     1 
3 222-222-2222 0015-09-03    NA 
4 222-222-2222 0015-09-04     1 
5 222-222-2222 0015-09-05     1 
6 222-222-2222 0015-09-06     1 
7 333-333-3333 0015-09-07    NA 
8 333-333-3333 0015-09-08     1 
9 333-333-3333 0015-09-09     1 

的每個電話號碼的第一行是NA因爲當時在那之前沒有呼叫。

+0

謝謝user3949008,爲你輸入。這對我有很大幫助,並且我已經能夠清楚地清理整個腳本。我認爲是什麼讓我的問題比我在其他地方看到的稍微深一點,我希望能夠添加一個過濾器,以便我只能提取通話1和通話2之間的時間,然後只能提取那些有呼叫2和3,等等。在我的數據中,我有一些總共有8個電話的條目。我想在每一步之間抽出時間。 –

+0

以上代碼爲您提供連續調用之間的時間。如果你想過濾超出一定數量的調用的行,你可以在dplyr中使用filter()或slice()來完成。 – Gopala

相關問題