как видно ниже, столбец геометрии каким-то образом превращается в объект «список».
В этом случае st_sf
не работает, говоря no simple features geometry column present
. Есть идеи?
> head(double_early_1995, 20)
# A tibble: 20 × 4
yield pattern year geometry
<dbl> <chr> <chr> <chr>
1 4380. Double_Early 1995 list(c(117.2259, 117.2659, 117.2659, 117.2259, 117.2259, 31.5508, 31.5508, 31.5108, 31.5108, 31.5508))
2 4691. Double_Early 1995 list(c(117.2659, 117.3059, 117.3059, 117.2659, 117.2659, 31.5508, 31.5508, 31.5108, 31.5108, 31.5508))
3 3941. Double_Early 1995 list(c(117.3059, 117.3459, 117.3459, 117.3059, 117.3059, 31.5508, 31.5508, 31.5108, 31.5108, 31.5508))
4 4286. Double_Early 1995 list(c(117.3459, 117.3859, 117.3859, 117.3459, 117.3459, 31.5508, 31.5508, 31.5108, 31.5108, 31.5508))
5 4012. Double_Early 1995 list(c(117.1459, 117.1859, 117.1859, 117.1459, 117.1459, 31.5108, 31.5108, 31.4708, 31.4708, 31.5108))
6 4413. Double_Early 1995 list(c(117.1859, 117.2259, 117.2259, 117.1859, 117.1859, 31.5108, 31.5108, 31.4708, 31.4708, 31.5108))
7 3897. Double_Early 1995 list(c(117.2659, 117.3059, 117.3059, 117.2659, 117.2659, 31.5108, 31.5108, 31.4708, 31.4708, 31.5108))
8 3857. Double_Early 1995 list(c(117.3059, 117.3459, 117.3459, 117.3059, 117.3059, 31.5108, 31.5108, 31.4708, 31.4708, 31.5108))
9 3810. Double_Early 1995 list(c(117.3459, 117.3859, 117.3859, 117.3459, 117.3459, 31.5108, 31.5108, 31.4708, 31.4708, 31.5108))
10 3787. Double_Early 1995 list(c(117.3859, 117.4259, 117.4259, 117.3859, 117.3859, 31.5108, 31.5108, 31.4708, 31.4708, 31.5108))
11 3844. Double_Early 1995 list(c(117.9059, 117.9459, 117.9459, 117.9059, 117.9059, 31.5108, 31.5108, 31.4708, 31.4708, 31.5108))
12 4281. Double_Early 1995 list(c(117.0659, 117.1059, 117.1059, 117.0659, 117.0659, 31.4708, 31.4708, 31.4308, 31.4308, 31.4708))
13 3509. Double_Early 1995 list(c(117.1059, 117.1459, 117.1459, 117.1059, 117.1059, 31.4708, 31.4708, 31.4308, 31.4308, 31.4708))
14 3704. Double_Early 1995 list(c(117.1459, 117.1859, 117.1859, 117.1459, 117.1459, 31.4708, 31.4708, 31.4308, 31.4308, 31.4708))
15 4431. Double_Early 1995 list(c(117.1859, 117.2259, 117.2259, 117.1859, 117.1859, 31.4708, 31.4708, 31.4308, 31.4308, 31.4708))
16 4532. Double_Early 1995 list(c(117.2259, 117.2659, 117.2659, 117.2259, 117.2259, 31.4708, 31.4708, 31.4308, 31.4308, 31.4708))
17 3908. Double_Early 1995 list(c(117.2659, 117.3059, 117.3059, 117.2659, 117.2659, 31.4708, 31.4708, 31.4308, 31.4308, 31.4708))
18 3839. Double_Early 1995 list(c(117.3059, 117.3459, 117.3459, 117.3059, 117.3059, 31.4708, 31.4708, 31.4308, 31.4308, 31.4708))
19 3846. Double_Early 1995 list(c(117.3859, 117.4259, 117.4259, 117.3859, 117.3859, 31.4708, 31.4708, 31.4308, 31.4308, 31.4708))
20 3780. Double_Early 1995 list(c(117.4259, 117.4659, 117.4659, 117.4259, 117.4259, 31.4708, 31.4708, 31.4308, 31.4308, 31.4708))
Я проследил за комментариями, и проблема была исправлена с помощью приведенного ниже кода.
double_early_1995 <- double_early_1995 %>%
mutate(geometry = st_sfc(lapply(geometry,
function(coords) { st_polygon(list(matrix(as.numeric(unlist(strsplit(substr(coords, 8, (nchar(coords) - 2)), ", "))),
ncol = 2, byrow = F)))})))
Спасибо всем!
Было бы полезно узнать, чему соответствует геометрия. ЛИНЕЙНАЯ СТРУНА?
И что превратило его в список?
Больше похоже на строковый столбец (состояния заголовка тиббла <chr>
), сгенерированный с помощью dput()
. Что такое источник данных/исходный процесс? Была ли попытка сохранить геометрию в CSV?
Необработанные данные представляли собой файлы tiff. Я выполнил несколько пространственных операций и объединил данные в формате tiff в фрейм данных, который затем был сохранен на локальном компьютере с помощью write_csv
. Данные в посте были read_csv
из сохраненного файла CSV.
Следующее преобразование может помочь
double_early_1995 <- double_early_1995 %>%
mutate(geometry = st_sfc(lapply(geometry, function(coords) { st_polygon(list(matrix(coords, ncol = 2, byrow = TRUE))) })))
Установите CRS (пример: WGS84).
st_crs(double_early_1995) <- 4326
Преобразование фрейма данных в объект SF
double_early_1995_sf <- st_as_sf(double_early_1995)
К сожалению, это не сработало должным образом. В сообщении об ошибке говорилось: Ошибка в mutate()
: ℹ В аргументе: geometry = st_sfc(...)
. Вызвано ошибкой в FUN()
: ! is.numeric(x) не имеет значения TRUE. Запустите rlang::last_trace()
, чтобы узнать, где произошла ошибка.
Похоже, что столбец геометрии в ваших данных читается как список координат, а не как правильный столбец геометрии, с которым может работать пакет sf.