如何根据R中的条件获取日期的频率计数?

How to get frequency count of date based on condition in R?

下面是我的场景

场景

我有两个数据框。第一个数据框包含有关系统使用情况的数据,另一个数据框包含有关系统位置的数据。我想根据系统的使用日期以及仪器所在的位置来跟踪仪器的使用情况。为此,我使用 dplyr 库对数据帧执行外部连接。接下来,我想根据日期获取系统的频率计数。为此,我在系统和位置上使用 groupby。如果系统未在使用中,当我查看位于位置 3 的系统 6 时,该系统的频率计数应为 0.However。因为,仪器未在使用中(无日期~假设未使用),该系统的频率计数应为 0,因为日期或用户列不包含任何数据。但是,下面的代码返回的频率计数为 1。我不确定,wrong.Below 可能是当前和预期的输出。

用代码提供解释。

数据帧 1:

df <- data.frame("Users" =c('A',"B","A",'C','B'), "Date" = c('17-03-2019','15-03-2019','11-03-2019','20-04-2019',"21-04-2019"), "Systems" = c("Sys1", "Sys1","Sys2","Sys3","Sys4"), stringsAsFactors = FALSE)
df
  Users       Date Systems
1     A 17-03-2019    Sys1
2     B 15-03-2019    Sys1
3     A 11-03-2019    Sys2
4     C 20-04-2019    Sys3
5     B 21-04-2019    Sys4

数据帧 2

loc_df<-data.frame("Locations" =c('loc1','loc1','loc2','loc2','loc3'),"Systems" = c("Sys1","Sys2","Sys3","Sys4","Sys6"), stringsAsFactors = FALSE)
loc_df

  Locations Systems
1      loc1    Sys1
2      loc1    Sys2
3      loc2    Sys3
4      loc2    Sys4
5      loc3    Sys6

频率计数代码

#Merging df
merge_df<-join(df, loc_df,type = "full")
#Replcaing NA's with 0
merge_df[is.na(merge_df)] <- 0
merge_df

#Code for frequency count
merge_df %>%
  group_by(Systems,Locations)%>%
  summarise(frequency = n())

当前输出:

  Systems Locations frequency
  <chr>   <chr>         <int>
1 Sys1    loc1              2
2 Sys2    loc1              1
3 Sys3    loc2              1
4 Sys4    loc2              1
5 Sys6    loc3              1

预期输出

 Systems Locations frequency
  <chr>   <chr>         <int>
1 Sys1    loc1              2
2 Sys2    loc1              1
3 Sys3    loc2              1
4 Sys4    loc2              1
5 Sys6    loc3              0

由于 NA 已经更改为 0 (merge_df[is.na(merge_df)] <- 0),我们可以进行逻辑评估并获得 sum 而不是 n(),这将return 行数,此处该行已存在

library(dplyr)
merge_df %>% 
   group_by(Systems, Locations) %>%
   summarise(frequeency = sum(Date != 0))
# A tibble: 5 x 3
# Groups:   Systems [5]
#  Systems Locations frequeency
#  <chr>   <chr>          <int>
#1 Sys1    loc1               2
#2 Sys2    loc1               1
#3 Sys3    loc2               1
#4 Sys4    loc2               1
#5 Sys6    loc3               0

与其将其更改为 0,还可以将其更改为 sum(!is.na(Date)),因为 NA 比 0

更合适