时间间隔匹配

Time-intervals match

假设我们在 4 pm to 10 pm6-hour 时间段内有以下时间使用数据,我想使用以下公式计算进行相同测量的分钟数。每个测量值都有一个 id 编号和一个 daynum 提示测量时间。有1000多个案例。我如何根据 id(例如个人测量)和一般情况来识别匹配项?

Id 1 的输出

Output for Id 2

Output for General

示例数据:

   structure(list(id = c("1", "1", "2", "2", "2", "Match"), daynum = c(1, 
2, 1, 2, 3, NA), t0 = c("A", "D", "A", "A", "A", NA), t1 = c("A", 
"D", "A", "A", "A", NA), t2 = c("A", "D", "A", "A", "A", NA), 
    t3 = c("A", "D", "A", "A", "A", NA), t4 = c("A", "D", "A", 
    "A", "A", NA), t5 = c("A", "D", "A", "A", "A", NA), t6 = c("A", 
    "E", "A", "A", "A", NA), t7 = c("A", "E", "A", "A", "A", 
    NA), t8 = c("A", "E", "A", "A", "A", NA), t9 = c("A", "A", 
    "A", "A", "A", "15"), t10 = c("A", "A", "A", "B", "A", NA
    ), t11 = c("B", "A", "A", "B", "A", NA), t12 = c("B", "A", 
    "A", "B", "A", NA), t13 = c("C", "A", "A", "B", "C", NA), 
    t14 = c("C", "A", "C", "B", "C", NA), t16 = c("C", "A", "C", 
    "B", "C", NA), t17 = c("C", "A", "C", "B", "C", NA), t18 = c("B", 
    "A", "C", "B", "B", NA), t19 = c("B", "A", "B", "B", "B", 
    NA), t20 = c("A", "A", "B", "B", "B", NA), t21 = c("B", "B", 
    "B", "B", "B", "15"), t22 = c("B", "B", "B", "B", "B", "15"
    ), t23 = c("B", "B", "B", "B", "B", "15"), t24 = c("B", "B", 
    "B", "B", "B", "15")), row.names = c(NA, -6L), spec = structure(list(
    cols = list(id = structure(list(), class = c("collector_character", 
    "collector")), daynum = structure(list(), class = c("collector_double", 
    "collector")), t0 = structure(list(), class = c("collector_character", 
    "collector")), t1 = structure(list(), class = c("collector_character", 
    "collector")), t2 = structure(list(), class = c("collector_character", 
    "collector")), t3 = structure(list(), class = c("collector_character", 
    "collector")), t4 = structure(list(), class = c("collector_character", 
    "collector")), t5 = structure(list(), class = c("collector_character", 
    "collector")), t6 = structure(list(), class = c("collector_character", 
    "collector")), t7 = structure(list(), class = c("collector_character", 
    "collector")), t8 = structure(list(), class = c("collector_character", 
    "collector")), t9 = structure(list(), class = c("collector_character", 
    "collector")), t10 = structure(list(), class = c("collector_character", 
    "collector")), t11 = structure(list(), class = c("collector_character", 
    "collector")), t12 = structure(list(), class = c("collector_character", 
    "collector")), t13 = structure(list(), class = c("collector_character", 
    "collector")), t14 = structure(list(), class = c("collector_character", 
    "collector")), t16 = structure(list(), class = c("collector_character", 
    "collector")), t17 = structure(list(), class = c("collector_character", 
    "collector")), t18 = structure(list(), class = c("collector_character", 
    "collector")), t19 = structure(list(), class = c("collector_character", 
    "collector")), t20 = structure(list(), class = c("collector_character", 
    "collector")), t21 = structure(list(), class = c("collector_character", 
    "collector")), t22 = structure(list(), class = c("collector_character", 
    "collector")), t23 = structure(list(), class = c("collector_character", 
    "collector")), t24 = structure(list(), class = c("collector_character", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), delim = ","), class = "col_spec"), class = c("spec_tbl_df", 
"tbl_df", "tbl", "data.frame"))

此代码根据 'id' 和 'daynum' 和 returns 拟合数据框,如果列中只有匹配项,则为 15..

df = df[1:5, ] #did this to exclude the 'Match' row of the sample data


find_match = function (df,  id = F, daynum = F){
  #subset the data frame after id value
  if(is.numeric(id)){
    df = df[df$id == id,]
  }
  
  if(is.numeric(daynum)){
    df = df[df$daynum == daynum,]
  }
  
  apply(df, 2, function(x){
    col_unique = length(unique(x))
    if(col_unique == 1){return(15)}
    else{return(NA)}
  })

}

find_match(df, id = 1)