首页 文章

创建函数以根据日期范围添加因子

提问于
浏览
0

我正在公寓楼里进行各种测试,需要添加一个因子(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"))

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

1 回答

  • 0

    我最终得到了以下功能

    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” .

相关问题