Нахождение дубликатовных значений в R -- r пол Связанный проблема

Finding duplicate values in r


2
vote

проблема

русский

Так, в строке, содержащей несколько 1 ',

Теперь возможно, что номер

 <код> cmake ..  2  

появляется на нескольких позициях, скажем, на нескольких позициях. Что я хочу, это

 <код> cmake ..  3  
Английский оригинал

So, In a string containing multiple 1's,

Now, it is possible that, the number

'1'  

appears at several positions, let's say, at multiple positions. What I want is

(3) 
</div
  
         
         

Список ответов

1
 
vote
vote
Лучший ответ
 

Следующий код делает именно то, что вы просите. Попробуйте это с <код> margin-top0 . Возвращает список 3-векторов. Обратите внимание, что первая тройка (1, 3, 4), потому что символ на 10-й позиции также является 1.

Окончательная версия, оптимизирована и без ошибок

 <код> margin-top1  

Примечание. Этот алгоритм имеет примерно квадратичный сложность времени выполнения, поэтому, если вы делаете свои строки в два раза длиннее, потребуется в четыре раза больше времени, чтобы найти все шаблоны в среднем.

Версия псевдокода

Чтобы помочь понять код. Для особенностей R, таких как margin-top2 , обратитесь к онлайн-документации R R, например, путем работы margin-top3 на командной строке R.

 <код> margin-top4  
 

The following code does exactly what you ask for. Try it with str_groups('1101101101'). It returns a list of 3-vectors. Note that the first triple is (1, 3, 4) because the character at the 10th position is also a 1.

Final version, optimized and without errors

str_groups <- function (s) {     digits <- as.numeric(strsplit(s, '')[[1]])     index1 <- which(digits == 1)     len <- length(digits)     back <- length(index1)     if (back == 0) return(list())     maxpitch <- (len - 1) %/% 2     patterns <- matrix(0, len, maxpitch)     result <- list()      for (pitch in 1:maxpitch) {         divisors <- which(pitch %% 1:(pitch %/% 2) == 0)         while (index1[back] > len - 2 * pitch) {             back <- back - 1             if (back == 0) return(result)         }         for (startpos in index1[1:back]) {             if (patterns[startpos, pitch] != 0) next             pos <- seq(startpos, len, pitch)             if (digits[pos[2]] != 1 || digits[pos[3]] != 1) next             repeats <- length(pos)             if (repeats > 3) for (i in 4:repeats) {                 if (digits[pos[i]] != 1) {                     repeats <- i - 1                     break                 }             }             continue <- F             for (subpitch in divisors) {                 sublen <- patterns[startpos, subpitch]                 if (sublen > pitch / subpitch * (repeats - 1)) {                     continue <- T                     break                 }             }             if (continue) next             for (i in 1:repeats) patterns[pos[i], pitch] <- repeats - i + 1             result <- append(result, list(c(startpos, pitch, repeats)))         }     }      return(result) } 

Note: this algorithm has roughly quadratic runtime complexity, so if you make your strings twice as long, it will take four times as much time to find all patterns on average.

Pseudocode version

To aid understanding of the code. For particulars of R functions such as which, consult the R online documentation, for example by running ?which on the R command line.

PROCEDURE str_groups WITH INPUT $s (a string of the form /(0|1)*/):     digits := array containing the digits in $s     index1 := positions of the digits in $s that are equal to 1     len := pointer to last item in $digits     back := pointer to last item in $index1     IF there are no items in $index1, EXIT WITH empty list     maxpitch := the greatest possible interval between 1-digits, given $len     patterns := array with $len rows and $maxpitch columns, initially all zero     result := array of triplets, initially empty      FOR EACH possible $pitch FROM 1 TO $maxpitch:         divisors := array of divisors of $pitch (including 1, excluding $pitch)         UPDATE $back TO the last position at which a pattern could start;             IF no such position remains, EXIT WITH result         FOR EACH possible $startpos IN $index1 up to $back:             IF $startpos is marked as part of a pattern, SKIP TO NEXT $startpos             pos := possible positions of pattern members given $startpos, $pitch             IF either the 2nd or 3rd $pos is not 1, SKIP TO NEXT $startpos             repeats := the number of positions in $pos             IF there are more than 3 positions in $pos THEN                 count how long the pattern continues                 UPDATE $repeats TO the length of the pattern             END IF (more than 3 positions)             FOR EACH possible $subpitch IN $divisors:                 check $patterns for pattern with interval $subpitch at $startpos                 IF such a pattern is found AND it envelopes the current pattern,                     SKIP TO NEXT $startpos                     (using helper variable $continue to cross two loop levels)                 END IF (pattern found)             END FOR (subpitch)             FOR EACH consecutive position IN the pattern:                 UPDATE $patterns at row of position and column of $pitch TO ...                     ... the remaining length of the pattern at that position             END FOR (position)             APPEND the triplet ($startpos, $pitch, $repeats) TO $result         END FOR (startpos)     END FOR (pitch)      EXIT WITH $result END PROCEDURE (str_groups) 
</div
 
 
         
         
2
 
vote

Это не полный ответ, но некоторые идеи (частично на основе комментариев):

 <код> margin-top5  

Вычислить функцию автокорреляции и нарисовать график: в этом случае я получаю периодичность = 3 довольно грубо, как первая точка, в которой наблюдается увеличение уменьшения ...

 <код> margin-top6  

Теперь мы знаем, что периодичность 3; Создание прогонов 3 с <код> margin-top7 и проанализировать их сходство:

 <код> margin-top8  
 

This is not a complete answer, but some ideas (partly based on comments):

z <- "1101101101" zz <- as.numeric(strsplit(z,"")[[1]]) 

Compute autocorrelation function and draw plot: in this case I'm getting the periodicity=3 pretty crudely as the first point at which there is an increase followed by a decrease ...

a1 <- acf(zz) first.peak <- which(diff(sign(diff(a1$acf[,,1])))==-2)[1] 

Now we know the periodicity is 3; create runs of 3 with embed() and analyze their similarities:

ee <- embed(zz,first.peak) pp <- apply(ee,1,paste,collapse="") mm <- outer(pp,pp,"==") aa <- apply(mm[!duplicated(mm),],1,which) sapply(aa,length)  ## 3 3 2   ## number of repeats sapply(aa,function(x) unique(diff(x)))  ## 3 3 3 
</div
 
 
 
 
0
 
vote

Возможно, следующий маршрут поможет:

  1. Конвертировать строку в векторных символов целых чисел

     <код> margin-top9  
  2. многократно преобразует этот вектор до матриц различного количества строк ...

     <код> 36%0  
  3. ... и используйте <код> 36%1 , чтобы найти соответствующие шаблоны в строках matrix <код> 36%2 :

     <Код> 36%3  
 

Perhaps the following route will help:

  1. Convert string to a vector of integers characters

    v <- as.integer(strsplit(s, "")[[1]]) 
  2. Repeatedly convert this vector to matrices of varying number of rows...

    m <- matrix(v, nrow=...) 
  3. ...and use rle to find relevant patterns in the rows of the matrix m:

    rle(m[1, ]); rle(m[2, ]); ... 
</div
 
 
       
       

Связанный проблема

1  Есть ли не-Java внедрение регрессионной модели M5P библиотеки RWEKA?  ( Is there a non java implementation of the m5p regression model of the rweka libr ) 
Я ищу функцию, которая создает модель регрессии M5P, как <код> M5P функция <код> RWeka библиотеки (как <код> M5P функция на основе кода Java, который имеет...

1  Как избежать проблемы Log-Quartelive Log-Inf в MLE Function из пакета Stat4?  ( How to avoid the inf log likelihood problem in mle function from stat4 package ) 
Я хочу максимизировать функцию вероятности логики, чтобы соответствовать некоторым данным, но функция MLE останавливается с этой ошибкой, когда логическая вер...

4  Как получить обратный CDF (ядро) в R?  ( How to get inverse cdf kernel in r ) 
Есть ли функция в R, которая рассчитает обратное ядро ​​(я рассматриваю нормальный) CDF для определенного альфа (0,1). Я нашел курс, но я не уверен, как это р...

1  Замените отсутствующие значения в ячейке со значением из ячейки выше (N-1) с помощью петли  ( Replace missing values in a cell with a value from the cell above n 1 using a ) 
У меня есть файл данных с тысячами строк, у которых есть пробелы, которые я хочу заполнить значением. Мне нужно заменить пустые ячейки со значениями из них вы...

0  Скрепление финансовых таблиц с веб-страницы с R, Rvest, RCURL  ( Scraping financial tables from web page with r rvest rcurl ) 
Я пробую разбор финансовых таблиц с веб-страницы. Я продолжал. Но я не могу устраивать список, или данные. Карамент <код> library(rvest) link <- "http://www...

2  Вопросы с установкой пакета Caret of R в Archlinux  ( Issues with installing caret package of r in archlinux ) 
Я пытаюсь установить пакет <код> SCRIPT="""UPDATE IND_AFRO.DRIVER SET Emp_Id = 1000, update_user_id = 'RIBST-4059' WHERE Emp_Id IN (SELECT Emp_Id ...

2  Сравнение нескольких классификаторов: Nemenyi + Holm Test в R  ( Comparing multiple classifiers nemenyi holm test in r ) 
Я пытаюсь воспроизвести результаты из (1) в виде новичков до R. Таблица 6 - это AUCS из 4 классификатора на 14 наборах данных: <код> auc <- matrix(c( 0.76...

0  Интеллектуальный способ создать сводную таблицу без цикла в R  ( Intelligent way to create summary table without for loop in r ) 
Добрый день, У меня есть кадр данных следующим образом, с временным меттом в первом столбце, как POSIXLT, а значение данных во втором: <код> properties2 ...

99  Как выбрать строку с максимальным значением в каждой группе  ( How to select the row with the maximum value in each group ) 
В наборе данных с несколькими наблюдениями для каждого предмета я хочу взять подмножество только с максимальным значением данных для каждой записи. Например, ...

0  Как сделать бесконечно рекурсивный список в R: путать [и [[  ( How to make an infinitely recursive list in r confuse and ) 
Редактировать: Этот вопрос глупо, я путающую [и [((спасибо @josilber), но я не могу удалить его. Как можно сделать бесконечно рекурсивный список, l == l [1]...

0  Hexfile Package R  ( Hexfile package r ) 
Я пытаюсь импортировать файл eviews (.wf1) в <код> R с hexView пакет. код: <код> file = readEViews(hexViewFile("eviewsr.wf1"),as.data.frame = TRUE) ...

6  403 Ошибка при использовании Rvest для входа в веб-сайт для соскабливания  ( 403 error when using rvest to log into website for scraping ) 
Я пытаюсь высказать страницу на веб-сайте, который требует входа в систему и в целом получение ошибки 403. Я изменил код из этих 2 сообщений для моего сайта...

5  Расчет дней в месяц между интервалом двух дат  ( Calculating days per month between interval of two dates ) 
У меня есть набор событий, которые каждый из которых имеет начало и окончание, но они проходят по объему ряда месяцев. Я хотел бы создать таблицу, которая пок...

2  Package Desolve Package Can Parames включают в себя матрицу?  ( Desolve package can parameters include a matrix ) 
Я пытаюсь кодировать модель Seir, которая является возрастной, стратифицированной; То есть в моих дифференциальных уравнениях у меня есть параметр для массово...

2  dlyryr "не обещание" ошибка  ( Dplyr not a promise error ) 
У меня есть набор набора панели, для которого я создал отсталые переменные с помощью функции LAG (). Когда я пытаюсь рассчитать дельта для каждого TimePoint, ...

Связанный проблема

1  Есть ли не-Java внедрение регрессионной модели M5P библиотеки RWEKA? 
1  Как избежать проблемы Log-Quartelive Log-Inf в MLE Function из пакета Stat4? 
4  Как получить обратный CDF (ядро) в R? 
1  Замените отсутствующие значения в ячейке со значением из ячейки выше (N-1) с помощью петли 
0  Скрепление финансовых таблиц с веб-страницы с R, Rvest, RCURL 
2  Вопросы с установкой пакета Caret of R в Archlinux 
2  Сравнение нескольких классификаторов: Nemenyi + Holm Test в R 
0  Интеллектуальный способ создать сводную таблицу без цикла в R 
99  Как выбрать строку с максимальным значением в каждой группе 
0  Как сделать бесконечно рекурсивный список в R: путать [и [[ 
0  Hexfile Package R 
6  403 Ошибка при использовании Rvest для входа в веб-сайт для соскабливания 
5  Расчет дней в месяц между интервалом двух дат 
2  Package Desolve Package Can Parames включают в себя матрицу? 
2  dlyryr "не обещание" ошибка