2016-02-18 2 views
2

У меня возникли проблемы, чтобы узнать частоту самой высокой повторяющейся цифры в пределах числа. Я хочу, чтобы результат был следующим:Частота большинства повторяющихся цифр в номере в R

Number   Output 
1111125436  5 
9999266613  4 
2346275210  3 
1234567890  1 

И так далее.

Я пробовал freqency, Biostrings, но не смог. Ценю вашу помощь.

+0

@thelatemail Спасибо за заметив, что. –

+0

Эта проблема может быть выполнена в O (n) времени с использованием алгоритма голосового голосования большинства по времени Мура http://www.cs.utexas.edu/~moore/best-ideas/mjrty/. Реализация Python здесь: http://stackoverflow.com/questions/27652492/python-find-majority-number-in-on-time-and-o1-memory – kilojoules

+0

@kilojoules R вопрос. –

ответ

4

Возможным base R решение:

df <- data.frame(Number = c(1111125436, 9999266613, 2346275210, 1234567890)) 
df$Output <- sapply(df$Number, function(x) tail(sort(table(strsplit(as.character(x), ''))), 1)) 
df 
#  Number Output 
# 1 1111125436  5 
# 2 9999266613  4 
# 3 2346275210  3 
# 4 1234567890  1 
+1

'max (...)' короче, чтобы писать и, вероятно, работает быстрее, чем 'tail (sort (...), 1)' – Adam

+0

@Adam да, я видел (и поддерживал) другой ответ, используя 'max' , который, вероятно, получит больше оборотов, чем мой, но я оставляю это альтернативное решение здесь, как есть. – daroczig

5

Там вполне может быть более эффективные способы, чем это, но разделив число в виде строки символов и таблицы-ков кажется возможность:

vapply(strsplit(as.character(dat$Number),""), function(x) max(table(x)), FUN.VALUE=1L) 
#[1] 5 4 3 1 
3

Вот еще один вариант с stri_count и pmax

library(stringi) 
do.call(pmax,lapply(0:9, stri_count_fixed, str=df1$Number)) 
#[1] 5 4 3 1 

Или с rowMaxs/stri_count

library(matrixStats) 
rowMaxs(sapply(0:9, stri_count_fixed, str=df1$Number)) 
#[1] 5 4 3 1 
Смежные вопросы