Я смоделировал некоторые данные, которые похожи на ваши данные, чтобы показать вам, как это сделать.Вам нужно будет установить пакеты tibble
, magrittr
и dplyr
для труб %>%
и функций для правильной работы:
Начните с этого:
library(tibble)
library(magrittr)
library(dplyr)
# simulate data
ops <- sample(c("Operator 1","Operator 2","Operator 3"),100,replace=TRUE)
tms <- rnorm(100,mean=20,sd=4)
df <- as.tibble(cbind(ops,tms))
df$ops <- as.factor(df$ops)
df$tms <- as.numeric(df$tms)
Затем отсортируйте df
по заданным вами ячейкам (измените код после breaks
, чтобы получить его так, как вы хотите, исходя из характеристик ваших временных данных):
> results <- df %>% group_by(ops) %>%
mutate(category=cut(tms, breaks=c(-Inf,0,10,20,30,Inf),
labels=c("-Inf-0 sec","0-10 sec","10-20 sec","20-30 sec","30-Inf sec")))
> results
# A tibble: 100 x 3
# Groups: ops [3]
ops tms category
<fct> <dbl> <fct>
1 Operator 1 16.6 10-20 sec
2 Operator 2 25.1 20-30 sec
3 Operator 3 20.4 20-30 sec
4 Operator 1 19.7 10-20 sec
5 Operator 3 23.6 20-30 sec
6 Operator 3 22.6 20-30 sec
7 Operator 1 14.6 10-20 sec
8 Operator 3 19.6 10-20 sec
9 Operator 3 22.3 20-30 sec
10 Operator 2 18.1 10-20 sec
# ... with 90 more rows
И вы можете проверитьданные в указанном выше формате, например:
> table(results$ops,results$category)
-Inf-0 sec 0-10 sec 10-20 sec 20-30 sec 30-Inf sec
Operator 1 0 0 24 13 1
Operator 2 0 0 13 13 0
Operator 3 0 0 12 24 0
или
> table(results$category,results$ops)
Operator 1 Operator 2 Operator 3
-Inf-0 sec 0 0 0
0-10 sec 0 0 0
10-20 sec 23 22 18
20-30 sec 12 13 12
30-Inf sec 0 0 0