Как использовать значения из одного фрейма данных для информирования функции суммирования в другом фрейме данных в R? - PullRequest
0 голосов
/ 29 октября 2018

У меня есть фрейм данных с большим количеством точек GPS, полученных из данных о движении животных. Я рассчитал расстояние между последовательными точками и сохранил его как отдельный столбец. Итак, мои данные выглядят так:

< Dist
  TagID    Date        Time      location.long location.lat Distance
    FW  15.10.2018  02:12:14.000    26.8666632  41.6550714  0
    FW  15.10.2018  02:15:22.000    26.8666077  41.655001   3.7
    FW  15.10.2018  02:31:12.000    26.8666417  41.6551456  4.5
    FW  15.10.2018  02:50:47.000    26.8665424  41.6549653  2.4
    FW  15.10.2018  03:00:45.000    26.8665161  41.6549384  9.8
    FW  15.10.2018  03:05:35.000    26.8665179  41.6549765  8.8
    FW  16.10.2018  08:00:20.000    26.8664499  41.6549864  0
    FW  16.10.2018  08:05:07.000    26.8664861  41.6550659  1.1
    FW  16.10.2018  08:10:08.000    26.8665225  41.655125   7.5
    FW  16.10.2018  08:15:06.000    26.866505   41.6550936  7.5
    FW  16.10.2018  08:20:06.000    26.8664646  41.6550879  3.2
    FW  16.10.2018  08:25:07.000    26.8635185  41.6515747  6.6
    FW  16.10.2018  08:40:28.000    26.8664751  41.6550872  2.3
    FW  17.10.2018  10:10:06.000    26.8735928  41.5852645  0
    FW  17.10.2018  10:15:06.000    26.8455718  41.5654656  3.2
    FW  17.10.2018  10:20:06.000    26.7989363  41.543988   4.5
    FW  17.10.2018  10:25:06.000    26.7581078  41.5424566  3.4
    FW  17.10.2018  10:30:06.000    26.7282547  41.560534   3.1
    FW  17.10.2018  10:35:06.000    26.7184667  41.5541104  1.0
    FW  17.10.2018  10:40:06.000    26.6363721  41.549993   6.8
    FW  17.10.2018  10:45:06.000    26.6293603  41.5496727  0.5
    FW  17.10.2018  10:50:06.000    26.6293732  41.5496753  11.2
    FW  17.10.2018  10:55:06.000    26.6293623  41.5496688  7.8
    FW  17.10.2018  11:00:06.000    26.6292996  41.549678   9.4
    FW  17.10.2018  11:05:07.000    26.6293224  41.5496449  1.2
    FW  18.10.2018  08:40:06.000    26.6294363  41.5496057  0
    FW  18.10.2018  08:45:06.000    26.6294137  41.5496145  16.3
    FW  18.10.2018  08:50:06.000    26.6294167  41.5496079  12.4
    FW  18.10.2018  08:55:06.000    26.6294302  41.549607   22.0
    FW  18.10.2018  09:00:06.000    26.6294248  41.5496141  4.3
    FW  18.10.2018  09:05:06.000    26.6294258  41.549612   2.1
    FW  18.10.2018  09:10:06.000    26.6294335  41.5496148  0.6
    FW  18.10.2018  09:15:06.000    26.6294349  41.5496131  1.6
    FW  18.10.2018  09:20:06.000    26.6294279  41.5496086  11.6
    FW  18.10.2018  09:25:06.000    26.6294394  41.5496087  2.3
    FW  18.10.2018  09:30:07.000    26.6294366  41.5496005  1.8
    FW  18.10.2018  09:35:06.000    26.6294161  41.5496169  7.5
    FW  18.10.2018  09:40:06.000    26.6294205  41.5496155  12.6
    FW  18.10.2018  09:45:07.000    26.6294313  41.5496143  5.9

В другом фрейме данных («Строки») у меня есть следующая информация:

< Rows
Date    Row_number
15.10.2018  4
16.10.2018  5
17.10.2018  9
18.10.2018  12

Значения в "Row_number" показывают номер строки из первого кадра данных, который представляет для меня особый интерес. Так что мне нужно использовать второй фрейм данных («Строки») в качестве источника информации. Исходя из этого для «Dist» мне нужно вычислить сумму значений в столбце «Distance» от первой строки до номера строки, указанного в кадре данных «Rows» для каждой конкретной даты. Так, например, для 15.10.2018 мне нужно сложить расстояния до четвертого ряда - 0 + 3,7 + 4,5 + 2,4 = 10,6. За 17.10.2018 сумма от первого ряда дня до 9-го ряда и т. Д.

Итак, я полагаю, что сначала я должен разбить данные по датам, чтобы создать отдельные единицы, а затем каким-то образом использовать сапли?

sp <- split(Dist, Dist$Date)
sapply(sp, function(sp){.....

1 Ответ

0 голосов
/ 29 октября 2018

Мы можем объединить два набора данных, а затем сгруппировать по «Дата», получить sum из «Расстояние», которое было поднастроено на основе значений «Row_number»

library(tidyverse)
left_join(Dist, Rows) %>% 
    group_by(Date) %>%
    mutate(DistanceSum = sum(Distance[seq_len(Row_number[1])], na.rm = TRUE))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...