使用Countifs和;查找以汇总R中的数据

使用Countifs和;查找以汇总R中的数据,r,excel,dataframe,countif,R,Excel,Dataframe,Countif,我有一个事务数据文件(位置之间的行程),我希望使用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

我有一个事务数据文件(位置之间的行程),我希望使用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
我的目标是返回某个区域每天(可能是每小时)发生的事件

在新的data.frame中,返回的示例将是

    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函数查看给定日期/时间内该区域出现的次数

我也希望把开始、发生和结束的日子都包括在内。如果可能的话,发生是零


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

这可以通过先重塑,然后总结来完成。下面是一个使用
reformae2
dplyr
的示例(数据为
dat

##首先重塑数据
图书馆(E2)
m%按(面积)划分的组别单位%>%
总结(Start.occurrences=sum(Area.Pos==“Start.Area”),
End.occurrences=sum(Area.Pos==“End.Area”))
#区域开始。事件结束。事件
#高街1号10
#国王街2号10
#新街3号11
#4风巷02
另一种方法是:将“Start.Date”和“Start.Area”列堆叠在相应的“End”列的顶部,使用新列“Pos”将这些列重命名为“Date”和“Area”,指定它们是“Start”还是“End”。然后很容易通过分组区域、日期或两者来总结

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

m完全按照您所展示的@lagizeit工作,谢谢您的帮助!
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