R - найти наибольшее количество повторяющихся цифр в одном числе - PullRequest
1 голос
/ 18 апреля 2020

Существует ли функция, которая может возвращать наибольшее число последовательно повторяющихся цифр для данного числа?

Желаемым выводом является часть 'Num_repeats' для чисел ниже:

Number                     Num_repeats
18.25328700000000026193    9
18.09606604359100042883    3
17.95982782048729065186    0

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

Другое базовое решение R

df <- within(df,
             Num_repeats <- sapply(gsub("\\D","",Number,perl = TRUE),
                                   function(x) (u<-max(rle(utf8ToInt(x))$lengths))*(u>1)))

или более простое

df <- within(df,
             Num_repeats <- sapply(Number,
                                   function(x) (u<-max(rle(utf8ToInt(x))$lengths))*(u>1)))

такое, что

> df
                   Number Num_repeats
1 18.25328700000000026193           9
2 18.09606604359100042883           3
3 17.95982782048729065186           0

DATA

df <- structure(list(Number = c("18.25328700000000026193", "18.09606604359100042883", 
"17.95982782048729065186")), row.names = c(NA, -3L), class = "data.frame")
2 голосов
/ 18 апреля 2020

Если это символьный столбец, мы можем разделить его с помощью strsplit и использовать rle для извлечения length смежных повторяющихся элементов и использовать max для возврата значения `max``

df1$Num_repeats <- sapply(strsplit(df1$Number, "[.]|"),
           function(x) with(rle(x), max(lengths)))
df1$Num_repeats[df1$Num_repeats==1] <- 0
df1
#                    Number Num_repeats
#1 18.25328700000000026193           9
#2 18.09606604359100042883           3 
#3 17.95982782048729065186           0

данные

df1 <-  structure(list(Number = c("18.25328700000000026193", 
     "18.09606604359100042883", 
"17.95982782048729065186")), class = "data.frame", row.names = c(NA, 
-3L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...