[英]dplyr: Find date for which an event occurs
第一個問題。 我是R的新手。我有以下數據框。
Source: local data frame [865,264 x 10]
page_views date dayofweek daytype caseID dateDecision dateArgument dateRearg
1 169 2008-01-30 Wednesday 0 2007-001 2007-10-10 2007-10-01
2 211 2008-01-16 Wednesday 0 2007-001 2007-10-10 2007-10-01
3 203 2008-01-17 Thursday 0 2007-001 2007-10-10 2007-10-01
4 177 2008-01-14 Monday 0 2007-001 2007-10-10 2007-10-01
5 224 2008-01-15 Tuesday 0 2007-001 2007-10-10 2007-10-01
6 152 2008-01-12 Saturday 1 2007-001 2007-10-10 2007-10-01
7 149 2008-01-13 Sunday 1 2007-001 2007-10-10 2007-10-01
8 220 2008-01-10 Thursday 0 2007-001 2007-10-10 2007-10-01
9 169 2008-01-11 Friday 0 2007-001 2007-10-10 2007-10-01
10 189 2008-01-18 Friday 0 2007-001 2007-10-10 2007-10-01
.. ... ... ... ... ... ... ... ...
Variables not shown: caseName (chr), term (int)
我想按時間順序為page_views大於零的每個caseID查找最早的日期。 我想以此日期創建一個新列。 每個caseID的結果應有一行。
我希望可以使用dplyr進行此操作,但是我願意接受其他解決方案。 使用dplyr似乎可以從group_by(caseID)和某種過濾器開始,但是我沒有運氣。
我搜索了stackoverflow和其他地方,但沒有發現任何接近的東西。
如果要創建新的摘要表:
df %>%
filter (page_views > 0) %>%
group_by (caseID) %>%
summarise (earliestDate = min(date))
date
變量不能成為min
工作因素; 它可以是一個字符。
輸出 :
Source: local data frame [1 x 2]
caseID earliestDate
1 2007-001 2008-01-10
您可以將上面代碼的最后一行替換為filter (min_rank(date) == 1)
以產生相同的結果。
如果您只想對表進行重復數據刪除,則現在可以:
df %>%
filter (page_views > 0) %>%
group_by (caseID) %>%
arrange (date) %>%
slice(1) # takes the first row, which will be the earliest since the table is sorted by date
輸出 :
Source: local data frame [1 x 8]
Groups: caseID
row page_views date dayofweek daytype caseID dateDecision dateArgument
1 8 220 2008-01-10 Thursday 0 2007-001 2007-10-10 2007-10-01
編輯:這是創建此子集的一種更為優雅的方法:
df %>% group_by(caseID) %>%
filter(page_views > 0, date == min(date))
這是一個可能的數據data.table
。 可以通過同時放過濾page_views > 0L
在i
表達,發現min(date)
在j
表達,而通過聚集caseID
在by
表達
library(data.table)
setDT(df)[page_views > 0L, min(date), caseID]
# caseID V1
# 1: 2007-001 2008-01-10
或者,如果你希望所有的列,您才可以使用S UB d ATA( .SD
)作為
setDT(df)[page_views > 0L, .SD[which.min(date)], caseID]
# caseID page_views date dayofweek daytype dateDecision dateArgument
# 1: 2007-001 220 2008-01-10 Thursday 0 2007-10-10 2007-10-01
使用dplyr,您幾乎可以按照描述中的說明進行操作。
x %>% group_by(caseID) %>% filter(page_views > 0) %>%
arrange(date) %>% summarise(min_date=head(date,1))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.