如何根据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
更合适
下面是我的场景
场景
我有两个数据框。第一个数据框包含有关系统使用情况的数据,另一个数据框包含有关系统位置的数据。我想根据系统的使用日期以及仪器所在的位置来跟踪仪器的使用情况。为此,我使用 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