st_nn - превратить список в фрейм данных - PullRequest
1 голос
/ 24 января 2020

Я работаю с некоторыми пространственными данными и хочу превратить вывод команды st_nn (выводит список) в кадр данных, к которому я могу присоединиться. Например,

library(nngeo)
library(data.table)

cities <- cities
towns <- towns

nearest <- st_nn(towns, cities, returnDist = TRUE, k = 1)

Вывод списка nearest дает мне уникальный идентификатор ближайшего города, а также расстояние. Я хотел бы это как тибл или фрейм данных. Вот что я попробовал:

setNames(do.call(rbind.data.frame, nearest), c("col1", "col2"))

Но это не совсем то, что я ищу. Я хотел бы, чтобы в качестве одного столбца был указан идентификатор ближайшего города, а в другом столбце - расстояние до этого города.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2020

Если вам нужен более tidyverse -й подход, вы можете использовать / протестировать следующий код:

library(nngeo)
library(purrr)

st_nn(towns, cities, returnDist = TRUE, k = 1) %>% 
  set_names("col1", "col2") %>% 
  map_df(., unlist)

#> # A tibble: 93 x 2
#>     col1   col2
#>    <int>  <dbl>
#>  1     3 53072.
#>  2     1 15069.
#>  3     3 33345.
#>  4     3 46392.
#>  5     3 57460.
#>  6     3 33249.
#>  7     3 25842.
#>  8     3 39434.
#>  9     1 23358.
#> 10     2 24749.
#> # … with 83 more rows

Создано в 2020-02-07 пакетом представ. (v0.3.0)

0 голосов
/ 24 января 2020

Я не уверен, что это то, что вы ищете, но из вашей команды do.call вы можете транспонировать ее и преобразовывать в виде фрейма данных:

t <- do.call(rbind.data.frame, nearest)
t <- data.frame(t)
colnames(t) <- c("col1","col2")
...