У меня есть вектор строки с примерно 500 КБ элементов в нем, и я хочу присвоить значение каждому элементу, чтобы показать номер группы каждого элемента.
Критерии группировки выглядят следующим образом:
- номер группы назначается последовательно, начиная с верхней части списка
- Каждому элементу следует назначать разные группы, если не менее 3 последовательных элементов находятся в возрастающем алфавитном порядке, в котором эти последовательные элементы будут в одной группе.
Как мне это сделать в R?
Например и ожидаемый результат:
> my_strings <- c("xx1", "1xxx", "abc.xyz", "a", "ad022", "ghj1", "kf1", "991r",
+ "jdd", "12vd", "r34o", "z", "034mh")
> expected_output <- c(1, 2, 3, 4, 4, 4, 4, 5, 6, 7, 7, 7, 8)
> (df <- data.frame(input = my_strings, output = expected_output))
input output
1 xx1 1
2 1xxx 2
3 abc.xyz 3
4 a 4
5 ad022 4
6 ghj1 4
7 kf1 4
8 991r 5
9 jdd 6
10 12vd 7
11 r34o 7
12 z 7
13 034mh 8
Пока что я пытаюсь использовать dplyr::lead
и назначать порядок на основе двух последовательных элементов. Я не знаю, что дальше делать.
res <- as_tibble(my_strings) %>%
mutate(after = lead(my_strings))
res$pre_group = apply(res, 1, function(x) order(c(x[1], x[2]))[2])