[英]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.