更新答:基於您的評論,這個怎麼樣:
library(dplyr)
# Data (with a few additions)
times = read.table(text="user time
A 7/7/2010
B 7/12/2010
B 7/13/2010
C 7/12/2010
A 7/12/2010
A 7/13/2010
C 7/15/2010", header=TRUE, stringsAsFactors=FALSE)
times$time = as.Date(times$time, "%m/%d/%Y")
times
user time
1 A 2010-07-07
2 B 2010-07-12
3 B 2010-07-13
4 C 2010-07-12
5 A 2010-07-12
6 A 2010-07-13
7 C 2010-07-15
times %>% group_by(user) %>%
summarise(First=min(time),
Last=max(time),
N = n(),
minDiff=min(diff(time)),
meanDiff=mean(diff(time)),
NumDiffUniq = length(unique(diff(time))))
user First Last N minDiff meanDiff NumDiffUniq
1 A 2010-07-07 2010-07-13 3 1 days 3 days 2
2 B 2010-07-12 2010-07-13 2 1 days 1 days 1
3 C 2010-07-12 2010-07-15 2 3 days 3 days 1
或者iginal回答:
我不清楚你想完成什麼。如果你只是想進行排序您的數據幀,然後用dplyr
你會怎麼做:
library(dplyr)
times.sorted = times %>% arrange(user, time)
如果你想time
成爲日期爲每個user
的字符串,那麼你可以做:
times.summary = times %>% group_by(user) %>%
summarise(time = paste(time, collapse=","))
但請注意,對於每個用戶,這將導致包含日期的單個字符串。
times.summary
user time
1 A 7/7/2010,7/12/2010
2 B 7/12/2010
3 C 7/12/2010,7/15/2010
如果你真的想每個單元是日期的一個載體,可以使每一個小區的名單(雖然有可能是一個更好的辦法)。例如:
times.new = times %>% group_by(user) %>%
summarise(time = list(as.vector(time)))
times.new$time
[[1]]
[1] "7/7/2010" "7/12/2010"
[[2]]
[1] "7/12/2010"
[[3]]
[1] "7/12/2010" "7/15/2010"
但是,如果你的目標是按組來分析數據,那麼你實際上並不需要做任何以上的。您可以使用基數,dplyr
或data.table
函數按組進行任何分析,而無需先對數據進行排序。
這對'data.table'很重要,例如, 'setDT(times)[,。(time = list(sort(time))),by =「user」]'。 – nrussell