如何使用以前时间戳中的值填充空列
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))
我正在进行网络分析,我在 "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))