更新答:基于您的评论,这个怎么样:
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