Ошибка в gsub применительно к нескольким точкам данных - PullRequest
0 голосов
/ 02 октября 2018

Мне нужно удалить числа, постоянно повторяющиеся в последовательности.

 a      b
Kor 66.73 > 66.73 > 66.73 > 66.73 > 66.73 > 66.73 > 
        73.42 > 66.73 > 73.42 > 66.73 > 66.73 > 66.73 > 
        66.73 > 66.73 > 66.73

Мне нужен выход, как показано ниже

a       b
Kor 66.73 > 66.73 > 66.73 > 66.73 > 66.73 > 66.73 > 
        73.42 > 66.73 > 73.42 > 66.73 > 66.73 > 66.73 > 
        66.73 > 66.73 > 66.73

Мне нужен следующий вывод

c= 66.73 > 73.42 > 66.73 > 73.42 > 66.73

Но я получаю ошибку в выводе

66.73 > 73.42 > 66.73.42 > 66.73

Я использовал следующий код

c$c <- gsub("\\b([\\w\\.]+)( > \\1\\b)+","\\1",c$b,perl = T)

1 Ответ

0 голосов
/ 02 октября 2018

Ваш шаблон [\\w\\.]+ соответствует 1 или более цифрам, буквам или точкам и может соответствовать 54 в 12.54 > 54.12`.Вы должны убедиться, что вы соответствуете значению с плавающей точкой, делая точку обязательной частью шаблона.

Вы можете использовать

sapply(str_extract_all(gsub("\\b(\\d+\\.\\d+)(?:\\s+>\\s+\\1\\b)+", "\\1", x), "\\d+\\.\\d+"), paste, collapse=" > ")
## => [1] "66.73 > 73.42 > 66.73 > 73.42 > 66.73"

С gsub("\\b(\\d+\\.\\d+)(?:\\s+>\\s+\\1\\b)+", "\\1", x) вы удаляете все дубликаты подрядчисла с плавающей запятой, и с помощью str_extract_all(x1, "\\d+\\.\\d+") вы можете извлечь те числа, которые остались, а затем paste все найденные значения с помощью " > " подстроки.

...