На самом деле мы можем легко сделать это, используя тип коэффициента R.Переменная factor
хранится в виде целых чисел, которые ссылаются на таблицу уровней, в которой хранятся фактические значения.Затем мы можем использовать as.integer
или as.numeric
для преобразования из коэффициента обратно в число.Когда вы это сделаете, таблица уровней будет потеряна, и у вас останутся только целые числа, которые ссылаются на нее;обычно это нежелательно (вам нужны ваши фактические значения, а не закодированные значения), но в этом случае это желательно, поскольку идентичные значения будут кодироваться с одинаковым номером:
df <- structure(list(group = c("group1", "group1", "group1", "group1",
"group1", "group2", "group2", "group2"), start_time = c(0, 0,
0, 0.4, 0.4, 0, 0.4, 0.8), end_time = c(0.4, 0.4, 0.4, 0.8, 0.8,
0.4, 0.8, 1.02)), class = "data.frame", row.names = c(NA, -8L
))
df %>%
mutate(idx = as.integer(factor(start_time)))
group start_time end_time idx
1 group1 0.0 0.40 1
2 group1 0.0 0.40 1
3 group1 0.0 0.40 1
4 group1 0.4 0.80 2
5 group1 0.4 0.80 2
6 group2 0.0 0.40 1
7 group2 0.4 0.80 2
8 group2 0.8 1.02 3
В качестве дополнительного преимущества это работает толькоа также в базе R:
df$idx <- as.integer(factor(df$start_time))
df
group start_time end_time idx
1 group1 0.0 0.40 1
2 group1 0.0 0.40 1
3 group1 0.0 0.40 1
4 group1 0.4 0.80 2
5 group1 0.4 0.80 2
6 group2 0.0 0.40 1
7 group2 0.4 0.80 2
8 group2 0.8 1.02 3