如果数据帧每个代码包含多个事件,如何将时间代码转换为dplyr代码

问题描述 投票:0回答:1

我想转换这样的时间码

library(lubridate)
library(tidyverse)

df_time <- tibble(time = c(ymd_hms("2020_01_01 00:00:01"),
                           ymd_hms("2020_01_01 00:00:02"),
                           ymd_hms("2020_01_01 00:00:03"),
                           ymd_hms("2020_01_01 00:00:04"),
                           ymd_hms("2020_01_01 00:00:05"),
                           ymd_hms("2020_01_01 00:00:06"),
                           ymd_hms("2020_01_01 00:00:07"),
                           ymd_hms("2020_01_01 00:00:08"),
                           ymd_hms("2020_01_01 00:00:09"),
                           ymd_hms("2020_01_01 00:00:10")),
                  a = c(0, 1, 1, 1, 1, 0, 0, 1, 1, 0),
                  b = c(0, 0, 1, 1, 0, 1, 1, 1, 0, 0))

导致

> df_time
# A tibble: 10 x 3
   time                    a     b
   <dttm>              <dbl> <dbl>
 1 2020-01-01 00:00:01     0     0
 2 2020-01-01 00:00:02     1     0
 3 2020-01-01 00:00:03     1     1
 4 2020-01-01 00:00:04     1     1
 5 2020-01-01 00:00:05     1     0
 6 2020-01-01 00:00:06     0     1
 7 2020-01-01 00:00:07     0     1
 8 2020-01-01 00:00:08     1     1
 9 2020-01-01 00:00:09     1     0
10 2020-01-01 00:00:10     0     0

依次输入代码(又称事件代码/“开始停止数据”)。应该看起来像下面的df:

df_turn <- tibble(start = c(ymd_hms("2020_01_01 00:00:02"),
                            ymd_hms("2020_01_01 00:00:03"),
                            ymd_hms("2020_01_01 00:00:06"),
                            ymd_hms("2020_01_01 00:00:08")),
                  end = c(ymd_hms("2020_01_01 00:00:05"),
                          ymd_hms("2020_01_01 00:00:04"),
                          ymd_hms("2020_01_01 00:00:08"),
                          ymd_hms("2020_01_01 00:00:09")),
                  code = c("a", "b", "b", "a"))

> df_turn
# A tibble: 4 x 3
  start               end                 code 
  <dttm>              <dttm>              <chr>
1 2020-01-01 00:00:02 2020-01-01 00:00:05 a    
2 2020-01-01 00:00:03 2020-01-01 00:00:04 b    
3 2020-01-01 00:00:06 2020-01-01 00:00:08 b    
4 2020-01-01 00:00:08 2020-01-01 00:00:09 a  

此出色的文章how to transform time codes into turn codes为每个代码提供了一个事件解决方案,但解决方案不超过一个。

谢谢!


r dataframe dplyr tidyr lubridate
1个回答
0
投票

我将通过指向相似任务的链接提供此解决方案

© www.soinside.com 2019 - 2024. All rights reserved.