我有三个人每天的总销售额数据。我想计算每天超过70次销售的次数。然后我想要计算每个事件的长度(事件将是当连续天数超过70时,例如,当每天的销售额超过70时,事件将连续5天,或者当每天的销售额超过70时,事件将连续2天)。我想一个列,分配事件的长度(例如5 5天,2 2天),当值低于70它应该是0。我希望能够比较不同的人之间的事件的长度。
我可以计算发生次数(下面的代码),但我很难计算连续几天的事件。
set.seed(1234)
#Load packages
library(dplyr)
library(lubridate)
# Create data
Date <- seq(as.Date("2010-01-01"), as.Date("2020-01-31"), by="days")
Tim_Sales <- sample(1 : 100, 3683, replace=TRUE)
John_Sales <- sample(1 : 100, 3683, replace=TRUE)
Rupert_Sales <- sample(1 : 100, 3683, replace=TRUE)
# Make dataframe
df <- data.frame(Date, Tim_Sales, John_Sales, Rupert_Sales)
# Identify occurences above 70 sales
df_occurrences <- df %>%
group_by(Date) %>%
summarise_all(funs(sum(. >70))) %>%
ungroup
df_occurrences
此方法使用ifelse
语句和mutate
来基于一组条件创建新列。
如果销售人员的销售额超过70,则从70中减去他或她的销售额。否则,这一列等于零。您可以在帮助文件中阅读更多关于ifelse
语句的信息,通过输入?ifelse
来访问。
library(tidyverse)
df_occurrences <- df %>%
mutate(Tim_70plus= ifelse(Tim_Sales > 70, Tim_Sales- 70, 0),
John_70plus= ifelse(John_Sales > 70, John_Sales- 70, 0),
Rupert_70plus= ifelse(Rupert_Sales > 70, Rupert_Sales- 70, 0))