我模拟了一些看起来像您的数据的数据,以向您展示如何做到这一点。您必须为管道%>% 安装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)
然后按您定义的 bin 对您的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