R - Извлечь координаты из строки в кадре данных - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть такие данные в кадре данных R - все они помещены в один столбец с именем SHAPE (ниже приведен только отрывок):

  • "POINT (16.361866982751053 48.177421074512125)"
  • "ТОЧКА (16.30410258091979 48.16069903617549)"
  • "ТОЧКА (16.226971074542572 48.20539106235006)"
  • "ТОЧКА (16.36781410799229 48 *54 * 101 * 101 * 1011 1011
1011 *1011* 1011 * 1011) *, как 1011 * 1011)координаты, чтобы они были помещены в столбец «X» и столбец «Y» моего кадра данных в числовом формате. Проблема в том, что числа не всегда имеют одинаковую длину.

Результат должен выглядеть следующим образом

Столбец X:

  • 16.361866982751053
  • 16.30410258091979
  • 16.226971074542572
  • 16.36781410799229

Столбец Y:

  • 48.177421074512125
  • 48.20539106235006
  • 48.25479849185693

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Просто чтобы предоставить другое решение, на этот раз используя strsplit() и lapply():

df <- data.frame(SHAPE = c("POINT (16.361866982751053 48.177421074512125)",
                           "POINT (16.30410258091979 48.16069903617549)",
                           "POINT (16.226971074542572 48.20539106235006)",
                           "POINT (16.36781410799229 48.25479849185693)"),
                 stringsAsFactors = F)

df[c("x", "y")] <- do.call(rbind, lapply(strsplit(df$SHAPE, "[()]"), function(col) {
  (parts <- unlist(strsplit(col[2], " ")))
}))
df

Это дает

                                          SHAPE                  x                  y
1 POINT (16.361866982751053 48.177421074512125) 16.361866982751053 48.177421074512125
2   POINT (16.30410258091979 48.16069903617549)  16.30410258091979  48.16069903617549
3  POINT (16.226971074542572 48.20539106235006) 16.226971074542572  48.20539106235006
4   POINT (16.36781410799229 48.25479849185693)  16.36781410799229  48.25479849185693
> 
0 голосов
/ 26 апреля 2018

Использование sub:

point <- "POINT (16.361866982751053 48.177421074512125)"
x <- sub("POINT \\((\\d+\\.\\d+) \\d+\\.\\d+\\)", "\\1", point, perl=TRUE)
y <- sub("POINT \\(\\d+\\.\\d+ (\\d+\\.\\d+)\\)", "\\1", point, perl=TRUE)

Демо

...