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

时间:2016-02-23 11:50:13

标签: r

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

我最终得到了以下功能

var2 = 'This is my second variable'

def source_func1(x):
    print(x)

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

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)
}

添加因子变量&#34; Fas&#34;到数据框&#34; Vimpeln&#34;根据矩阵中给出的日期&#34;阶段&#34;如所定义的那样。