如何使用以前时间戳中的值填充空列

How to populate empty column with values from previous time stamp

我正在进行网络分析,我在 "Target" 列中有位置数据。我想用上一个时间戳中的目标数据填充 "Source" 列。这可能吗?

ID      Date          Year    Month   Day    Time    Target     Source
650     18/07/2019    2019    Jul     18     21:32   Caledonia  NA
650     19/07/2019    2019    Jul     19     23:47   Digby      NA
650     27/07/2019    2019    Jul     27     19:24   Caledonia  NA

我希望源列使用该 ID

的前一个 "Target" 填充
ID      Date          Year    Month   Day    Time    Target     Source
650     18/07/2019    2019    Jul     18     21:32   Caledonia  NA
650     19/07/2019    2019    Jul     19     23:47   Digby      Caledonia
650     27/07/2019    2019    Jul     27     19:24   Caledonia  Digby

所以dplyr的lag函数对你会有很大的帮助。

在下面的示例代码中,我是 1)创建日期和时间的时间戳 2) 按这个新变量显式排序,以便 lag 可以知道前面的值是什么 3) 按 ID 分组,以便我们分别获得每个 ID 的滞后 Target 4) 运行 滞后函数并指定原始值应该是什么

library(dplyr)
library(tidyr)
library(tibble)

t <- tibble(
        ID = c(650, 650, 650), 
        Date = c('18/07/2019', '19/07/2019', '27/07/2019'), 
        Time = c('21:32', '23:47', '19:24'), 
        Target = c('Caledonia', 'Digby', 'Caledonia'))

t <- t %>% 
        mutate(date_time = as.POSIXct(
                paste(Date, Time, sep = ' '), 
                format = '%d/%m/%Y %H:%M')) %>%
        arrange(date_time) %>% 
        group_by(ID) %>% 
        mutate(Source = lag(Target, default = NA)) %>% 
        ungroup()

t

     ID Date       Time  Target    date_time           Source   
  <dbl> <chr>      <chr> <chr>     <dttm>              <chr>    
1   650 18/07/2019 21:32 Caledonia 2019-07-18 21:32:00 NA       
2   650 19/07/2019 23:47 Digby     2019-07-19 23:47:00 Caledonia
3   650 27/07/2019 19:24 Caledonia 2019-07-27 19:24:00 Digby  

## to replace initial values with `Target`

t %>% 
        mutate(Source = case_when(
                !is.na(Source) ~ Source,
                is.na(Source) ~ Target))