繁体   English   中英

如何用上一个时间戳的值填充空列

[英]How to populate empty column with values from previous time stamp

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

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 的先前“目标”

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 的滞后 function 对你有很大的帮助。

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

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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM