如何使用一个数据帧中的值通知R中另一数据帧内的求和函数?

时间:2018-10-29 17:10:22

标签: r

我有一个数据框,其中包含大量来自动物运动数据的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)中的值显示了第一个数据帧中的行号,这对我来说特别有意义。 因此,我需要使用第二个数据框(“行”)作为信息源。基于“距离”的值,我需要针对每个特定日期计算从第一行到“行”数据框中指示的行号的“距离”列中的值之和。例如对于15.10.2018,我需要将距离累加到第四行-0 + 3.7 + 4.5 + 2.4 = 10.6。对于2018年10月17日,从第一行到第9行的总和,依此类推。

所以我想我应该先按日期分割数据,以便创建单独的单位,然后以某种方式使用sapply?

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

1 个答案:

答案 0 :(得分:0)

我们可以加入两个数据集,然后按'日期'分组,获得'距离'的sum,并根据'行号'的值进行分组

library(tidyverse)
left_join(Dist, Rows) %>% 
    group_by(Date) %>%
    mutate(DistanceSum = sum(Distance[seq_len(Row_number[1])], na.rm = TRUE))