Нечеткое сравнение и объединение похожих записей в одном столбце данных - PullRequest
0 голосов
/ 12 декабря 2018

В настоящее время требуется объединить один столбец и указать количество для каждой строки.Есть несколько проблем, с которыми я сталкиваюсь, и мне нужна помощь:

  1. Многие строки похожи, но не точны из-за параметра или другой информации, такой как код ошибки.
  2. Данные, с которыми вы работаете, непредсказуемы, поэтому совокупность должна иметь определенный уровень гибкости, чтобы соответствовать.
  3. Нет способа узнать, где произойдет отклонение или шаблон строки.
  4. Невозможно заранее узнать ни сообщения, ни значения, которые отличают некоторые строки.

Поэтому я хочу сделать следующее:

TextData
Message : @p_id is not valid
Message : @p_id is not valid
Message : @p_id is not valid
Message : @p_id is not valid
Message : ID record does not exist: @p_Id=11933
Message : ID record does not exist: @p_Id=21944
Message : ID record does not exist: @p_Id=31933
Message : ID record does not exist: @p_Id=41931
Message : ID record does not exist: @p_Id=51993
The duplicate key value is (129).
The duplicate key value is (129).
The duplicate key value is (135).

Подобрано и посчитано примерно так:

Count    TextData                                    Values
4        Message : @p_id is not valid               
5        Message : ID record does not exist: @p_Id=  11933,21944,31933,41931,51993
3        The duplicate key value is ().              129,135

Если это невозможно, то хотя бы в это

Count    TextData
4        Message : @p_id is not valid
5        Message : ID record does not exist: @p_Id=
3        The duplicate key value is ().

Я искал несколько часов, пытаясьчтобы найти решение для чего-то подобного, но не нашел пример, который бы сработал или соответствовал моей ситуации.

1 Ответ

0 голосов
/ 13 декабря 2018

data.table решение

library( data.table )
library( stringr )
#read data
dt <- fread(
  "Message : @p_id is not valid
   Message : @p_id is not valid
  Message : @p_id is not valid
  Message : @p_id is not valid
  Message : ID record does not exist: @p_Id=11933
  Message : ID record does not exist: @p_Id=21944
  Message : ID record does not exist: @p_Id=31933
  Message : ID record does not exist: @p_Id=41931
  Message : ID record does not exist: @p_Id=51993
  The duplicate key value is (129).
  The duplicate key value is (129).
  The duplicate key value is (135).", header = FALSE, sep = "")

#see if a string with numbers is present in the text, if so: extract
dt[, `:=`( id = stringr::str_extract( V1, "\\d+" ),
           V1 = ifelse( grepl ( "\\d+", V1 ), gsub( "\\d+", "", V1 ), V1 ) ) ]

#summarise    
dt[, list( Count = .N, values = toString( unique( id ) ) ), by = V1][]

#                                            V1 Count                            values
# 1:               Message : @p_id is not valid     4                                NA
# 2: Message : ID record does not exist: @p_Id=     5 11933, 21944, 31933, 41931, 51993
# 3:             The duplicate key value is ().     3                          129, 135
...