【问题标题】:create function to add factor according to date range创建函数以根据日期范围添加因子
【发布时间】:2016-06-05 05:56:50
【问题描述】:

我正在公寓楼中进行各种测试,需要添加一个因子 (Etapp <i>) 来指示观察结果属于哪个测试阶段。 我创建了一个包含测试阶段以及相应的开始和结束日期的矩阵。

phases <-matrix(c(t1,t2,t2,t3), ncol = 2,
dimnames = list(c("Etapp I", "Etapp II"), c("Start","Stopp")), byrow = TRUE)

> phases
    Start Stopp
Etapp I 16812 16827
EtappII 16827 16841

变量 t1, t2, ... 包含测试阶段的断点,如 POSIXct

主数据框是宽格式,包含一个以日期 (Tid) 作为观察 id 的列。大小约为 40-50 个变量中的几千个观察值,其中只有日期在这里很重要。

我的计划是为此创建一个函数,因为我有几个建筑物,每个建筑物都有自己的观察数据框。该函数将采用两个参数构建数据框和上述矩阵阶段,并返回一个添加了因子的数据框。

addPhase <- function(df, ph) {
  # Merge new variable using dplyr::merge()
}

我如何根据时间在多级因子中考虑这些观察结果。我设法使用如下逻辑向量为单个测试阶段设置一个因素

factor(as.Date(VitaHusen$Tid) > t1 & as.Date(VitaHusen$Tid) < t2,
labels = c("","Etapp I"))

如何将其扩展到多个时间范围? 我可以使用阶段中的暗名来为我的新因子列设置因子水平吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    我最终得到了以下功能

    addPhase <- function(df, ph, varName) {
      ph_names <- rownames(ph)
      for (i in ph_names) { # Iterate for all phases in matrix ph
        ph_start <- ph[i,1] # Extract start date
        ph_end <- ph[i,2]   # Extract end date
        # Assign name of phase to matching rows
        df[as.Date(df$Tid) > ph_start & as.Date(df$Tid) < ph_end, varName]     <- i
      }
      df[[varName]] <- as.factor(df[[varName]]) # Convert to factor
      return(df)
    }
    

    对于我的一个测试对象 Vimpeln,调用看起来像

    Vimpeln <- addPhase(Vimpeln, phases, "Fas")
    

    根据问题定义的矩阵“阶段”中给出的日期,将因子变量“Fas”添加到数据框“Vimpeln”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      相关资源
      最近更新 更多