Nano Hash - криптовалюты, майнинг, программирование

Мутировать, когда на выходе функции есть данные в двух столбцах (геосфера)

У меня есть данные обследования животных на трансектах. Трансекты разделены на участки. Есть данные широты/долготы для начала/конца некоторых разделов, но нет других, и я хочу рассчитать начальную/конечную точки для разделов, где эти значения отсутствуют. Отсутствующие начальные/конечные точки должны быть рассчитаны с использованием азимута секции (градусы), длины секции (м).

Пример данных:

Section StartLon StartLat EndLon EndLat Bearing Length
1 -132.4053 53.00704 -132.4053 53.00714 360 5
2 -132.4053 53.00714 NA NA 360 10

Я пытаюсь использовать destPoint (геосфера) для вычисления отсутствующих начальных/конечных точек (NA). Вывод destPoint выглядит так:

        lon       lat
[1,] -132.4053 53.00701

Мой код:

data %>% 
  mutate(EndLon = if_else(is.na(EndLon), destPoint(c(StartLon, StartLat), Bearing, Length), EndLon))

data %>% 
  mutate(EndLat = if_else(is.na(EndLat), destPoint(c(StartLon, StartLat), Bearing, Length), EndLat))

Мой код дает эту ошибку:

Error: Problem with `mutate()` input `test`.
x Wrong length for a vector, should be 2
i Input `test` is `if_else(...)`

Я думаю, что ошибка связана с тем, что вывод destPoint - это два значения (долгота и широта), а измененный столбец может содержать только одно значение. Может быть, есть способ использовать select(), чтобы в измененный столбец попадали только lon или lat?

Надеюсь на решение dplyr.

26.01.2021

Ответы:


1

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

library(dplyr)
library(geosphere)
data %>%
    rowwise %>%
    mutate(EndLon = if(is.na(EndLon)) 
       destPoint(c(StartLon, StartLat), Bearing, Length)[, 'lon'] else EndLon) %>%
    ungroup

-выход

# A tibble: 2 x 7
#  Section StartLon StartLat EndLon EndLat Bearing Length
#    <int>    <dbl>    <dbl>  <dbl>  <dbl>   <int>  <int>
#1       1    -132.     53.0  -132.   53.0     360      5
#2       2    -132.     53.0  -132.   NA       360     10

данные

data <- structure(list(Section = 1:2, StartLon = c(-132.4053, -132.4053
), StartLat = c(53.00704, 53.00714), EndLon = c(-132.4053, NA
), EndLat = c(53.00714, NA), Bearing = c(360L, 360L), Length = c(5L, 
10L)), class = "data.frame", row.names = c(NA, -2L))

Проблема будет заключаться в том, что c(StartLon, StartLat) объединит все значения столбца из обоих этих столбцов, и, таким образом, length одного из аргументов для if_else станет другим в length, чем остальные. Если мы выполним rowwise, он сгруппируется по row, и мы сможем использовать if/else (что требует входного логического выражения length 1)

26.01.2021
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..