Извлечение идентификаторов из текста во многих столбцах - PullRequest
0 голосов
/ 24 июня 2019

У меня огромный df, который разделен разными символами (#, пробел ,,).После прочтения данных у меня есть столбцы, которые еще не разделены.Я пытался использовать tidyr::separate для разделения столбцов.Но так как у меня много столбцов, результат разделения перезаписывает следующий столбец.

Я попытался использовать '' tidyr :: Отдельный '' для разделения столбцов.Но так как у меня много столбцов, результат разделения перезаписывает следующий столбец.

содержимое одного столбца выглядит следующим образом: Markt#ID=3002349#X=8612088#Y=50228881#RI=1|&RD=10062019&RT=6:46&L=1543&SM=0#1#2&CT=-1#-1#-1#-1#-1&P1=1111111111111111&O1=99999999&T1=99999999&F=-1&RF=1999991999999999111090999999&GP=FF=cost=-1|minDist=0|maxDist=2000|speed=100|routingType=1|ellipseRadius=1000|maxDur=120|waitTime=-1|linDistRouting=0|#BF=cost=-1|minDist=0|maxDist=2000|speed=100|routingType=1|ellipseRadius=1000|maxDur=120|waitTime=-1|linDistRouting=0|#&

Всего у меня 12 столбцов, из которых яхотите извлечь IDs и coordinates.

Ожидаемые результаты:

 ID       X         Y
 3002349  8612088  50228881

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Если все строки имеют одинаковый формат, вы можете использовать tidyr::extract

tidyr::extract(df, v1, c("ID", "X", "Y"), regex = ".*ID=(\\d+)#X=(\\d+)#Y=(\\d+)")
#       ID       X        Y
#1 3002349 8612088 50228881

. При этом из текста извлекаются числа, за которыми следуют метки ID, X и Y.

данные

x <- "Markt#ID=3002349#X=8612088#Y=50228881#RI=1|&RD=10062019&RT=6:46&L=1543&SM=0#1#2&CT=-1#-1#-1#-1#-1&P1=1111111111111111&O1=99999999&T1=99999999&F=-1&RF=1999991999999999111090999999&GP=FF=cost=-1|minDist=0|maxDist=2000|speed=100|routingType=1|ellipseRadius=1000|maxDur=120|waitTime=-1|linDistRouting=0|#BF=cost=-1|minDist=0|maxDist=2000|speed=100|routingType=1|ellipseRadius=1000|maxDur=120|waitTime=-1|linDistRouting=0|#&"
df <- data.frame(v1 = x)
0 голосов
/ 24 июня 2019

Мы можем сделать это в base R, используя read.csv и sub

read.csv(text= sub(".*ID=(\\d+)#X=(\\d+)#Y=(\\d+).*", "\\1,\\2,\\3", 
           df$v1), header = FALSE, col.names = c("ID", "X", "Y"))
#     ID       X        Y
#1 3002349 8612088 50228881

данные

df <- structure(list(v1 = structure(1L, .Label = "Markt#ID=3002349#X=8612088#Y=50228881#RI=1|&RD=10062019&RT=6:46&L=1543&SM=0#1#2&CT=-1#-1#-1#-1#-1&P1=1111111111111111&O1=99999999&T1=99999999&F=-1&RF=1999991999999999111090999999&GP=FF=cost=-1|minDist=0|maxDist=2000|speed=100|routingType=1|ellipseRadius=1000|maxDur=120|waitTime=-1|linDistRouting=0|#BF=cost=-1|minDist=0|maxDist=2000|speed=100|routingType=1|ellipseRadius=1000|maxDur=120|waitTime=-1|linDistRouting=0|#&", class = "factor")), class = "data.frame", row.names = c(NA, 
-1L))
...