使用Countifs和Lookups的等价物来总结R中的数据

我有一个交易数据(位置之间的旅行)的文件,我正在寻找使用R,这是我比较新的总结。 样本数据

Start.Date Start.Area End.Date End.Area 2007-07-12 14:00 New Street 2007-07-12 15:46 Windy Lane 2007-07-12 15:10 High Street 2007-07-12 18:08 New Street 2007-07-12 16:42 Kings Street 2007-07-12 17:47 Windy Lane 

我的目标是为每个地区(可能是小时)返回发生的事件。

样本返回,在一个新的数据框架,将是

  Date Area Start.Occurances End.Occurances 2007-07-12 New Street 1 1 2007-07-12 High Street 1 0 2007-07-12 Kings Street 1 0 2007-07-12 Windy Lane 0 2 

理想情况下,我会在Excel中进行分析,但不能处理我的数据的规模。 在电子表格中,我将使用countif函数来查看区域在给定date/时间中出现的次数。

如果可能的话,我也希望把Start.Occurances和End.Occurances都设为零的日子。

我已经看到关于Countif函数或匹配/索引组合的问题没有解决我的查询,所以我希望有人能帮助我!

这可以通过首先重塑然后进行总结来完成。 这里是一个使用reshape2dplyr (数据是dat )的例子。

 ## First reshape the data library(reshape2) m <- melt(dat, id.vars=c("Start.Date", "End.Date"), value.name = "Area", variable.name="Area.Pos") ## Summarise, grouping by Area library(dplyr) m %>% group_by(Area) %>% summarise(Start.Occurences = sum(Area.Pos == "Start.Area"), End.Occurences = sum(Area.Pos == "End.Area")) # Area Start.Occurences End.Occurences # 1 High Street 1 0 # 2 Kings Street 1 0 # 3 New Street 1 1 # 4 Windy Lane 0 2 

另一种方法:在相应的“结束”列顶部堆叠“Start.Date”和“Start.Area”列,使用新的列“Pos”将列重命名为“Date”和“Area”,指定它是否是“开始”或“结束”。 然后,通过将区域,date或两者进行分组可以很容易地进行总结。

 m <- rbind(`names<-`(dat[,grep("Start", names(dat))], c("Date", "Area")), `names<-`(dat[,grep("End", names(dat))], c("Date", "Area"))) m$Pos <- rep(c("Start", "End"), each=nrow(dat)) m %>% group_by(as.Date(Date), Area) %>% summarise(Start.Occurences = sum(Pos == "Start"), End.Occurences = sum(Pos == "End")) as.Date(Date) Area Start.Occurences End.Occurences # 1 2007-07-12 High Street 1 0 # 2 2007-07-12 Kings Street 1 0 # 3 2007-07-12 New Street 1 1 # 4 2007-07-12 Windy Lane 0 2