【问题标题】:Data Manipulation/ Imputation for Timeline using R使用 R 对时间线进行数据操作/插补
【发布时间】:2019-05-30 13:50:57
【问题描述】:

我正在尝试使用 R 中的 vistime 包创建时间线。我遇到的问题是创建不存在数据的行,以获得连续的时间线。

手动执行此操作可能非常乏味,我想找到一种方法来自动填写缺少数据期间的默认标签。

以下是数据和当前输出的示例:

library(vistime)

  syst <- data.frame(Position = rep(c( "DOWN"), each= 5),
    Name = c("SYS2", "SYS2","SYS4","SYS4","SYS6"),
    start = c("2018-10-16","2018-12-06","2018-10-24","2018-12-05","2018-11-09"),
    end = c("2018-11-26","2018-12-31","2018-11-23","2018-12-31","2018-12-31"),
    color = rep(c('#FF0000'), each=5),
    fontcolor = rep(c('white'), each=5))

vistime(syst, events = "Position", groups = "Name")

期望的输出:

syst2 <- data.frame(Position = rep(c( "UP","DOWN"), 5),
        Name = rep(c("SYS2", "SYS2","SYS4","SYS4","SYS6"), each=2),
        start = c("2018-10-01","2018-10-16","2018-11-26","2018-12-06","2018-10-01","2018-10-24","2018-11-23","2018-12-05","2018-10-01","2018-11-09"),
        end = c("2018-10-16","2018-11-26","2018-12-06","2018-12-31","2018-10-24","2018-11-23","2018-12-05","2018-12-31","2018-11-09","2018-12-31"),
        color = rep(c("#008000",'#FF0000'), 5),
        fontcolor = rep(c('white'), 10))


vistime(syst2, events = "Position", groups = "Name")

【问题讨论】:

    标签: r data-visualization data-manipulation timeline vistime


    【解决方案1】:

    我们可以这样做。先让

    rng <- c("2018-10-01", "2018-12-31")
    

    是您考虑的开始日期和结束日期的向量。另外,我在syst 的定义中添加了stringsAsFactors = FALSE,以避免在添加新日期时出现问题。

    那么我们有

    library(tidyverse)
    syst2 <- syst %>% group_by(Name) %>% 
      do({bind_rows(., data.frame(Position = "UP", Name = .$Name[1], 
                                  start = c(rng[1], .$end),
                                  end = c(.$start, rng[2]), 
                                  color = "#008000", 
                                  fontcolor = "white", 
                                  stringsAsFactors = FALSE))}) %>%
      filter(start != end)
    vistime(syst2, events = "Position", groups = "Name")
    

    因此,我们按Name 分组,对于每个组,我们将现有行与一个新数据框绑定,其中所有内容都按预期指定,唯一的技巧是使用start 和end。最后,我过滤掉开始日期和结束日期重合的那些行。

    【讨论】:

    • 您好朱利叶斯,感谢您的回复。当我尝试运行代码时,我在开始和结束字段中得到非日期值(例如 start= 2 和 end =5)。
    • @Richard.R,这是因为 start 和 end 列最初是因素,我在定义 syst 时将 stringsAsFactors = FALSE 添加到 data.frame 调用中。例如,您可以在加载数据时添加相同的内容。或者syst$start &lt;- as.character(syst$start); syst$end &lt;- as.character(syst$end)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 2019-01-06
    • 2010-12-30
    • 2020-08-20
    • 2017-11-21
    • 2017-12-27
    相关资源
    最近更新 更多