【问题标题】:Turn a time-point column into intervals将时间点列转换为间隔
【发布时间】:2021-12-04 11:27:07
【问题描述】:

我有一个存储时间点数据的 tibble:

data.frame(Time = c(0, 1, 2, 3, 4), readings = c(123, 234, 145, 234, 121))

我想把它变成如下表格:

From To Initial End
0 1 123 234
1 2 234 145
2 3 145 234
3 4 234 121
... ... ... ...

我更喜欢在 R/tidyverse 中完成,但如果 python 可以用更简单的方式完成,我也可以采用一些 python 代码。谢谢!

【问题讨论】:

    标签: python r tidyverse intervals tibble


    【解决方案1】:

    这行得通吗:

    library(dplyr)
    
    df %>% mutate(To = lead(Time), End = lead(readings)) %>% 
           select('From' = Time, To, 'Initial' = readings, End)
      From To Initial End
    1    0  1     123 234
    2    1  2     234 145
    3    2  3     145 234
    4    3  4     234 121
    

    【讨论】:

      【解决方案2】:

      我们可以在base R 中通过删除数据集的最后一行和第一行并重命名列来执行此操作

      setNames(cbind(df1[-nrow(df1), ], df1[-1, ]),
           c("From", "Initial", "To", "End"))[c(1, 3, 2, 4)]
        From To Initial End
      1    0  1     123 234
      2    1  2     234 145
      3    2  3     145 234
      4    3  4     234 121
      

      【讨论】:

        【解决方案3】:

        这里是另一种dplyr 方法:使用across

        df %>%
          mutate(across(everything(), lead, .names="end_{col}")) %>% 
          select(From=Time, To=end_Time, Initial=readings, End=end_readings)
        
          From To Initial End
        1    0  1     123 234
        2    1  2     234 145
        3    2  3     145 234
        4    3  4     234 121
        5    4 NA     121  NA
        

        【讨论】:

          猜你喜欢
          • 2021-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多