估算缺失的观察结果R

时间:2015-05-29 15:00:50

标签: r

我有一个日历天和每小时观察的数据框,其关联值如下:

   startTime  Hour  delay
   04-22      0     10
   04-22      1     10
   04-22      3     10
   04-22      4     10

所需要的是一天中的所有小时数以及与所述缺失时间相关联的0而不是没有值或NA。如何最好地实现这一目标?我尝试使用虚拟数据帧从dplyr中获取full_join,但这种方法看起来很笨拙且效率低下。

简而言之,我需要这个:

   startTime  Hour  delay
   04-22      0     10
   04-22      1     10
   04-22      2     0
   04-22      3     10
   04-22      4     10

2 个答案:

答案 0 :(得分:3)

您可以使用<?php $angka = array(1,11,12,13,2,21,22,23); $hitung = count($angka); $keys = array_keys($angka); echo "<ul>"; foreach(array_keys($keys) as $k){ if(strlen($angka[$keys[$k]])==1){ echo "<li>ini bukan sub</li>"; } else if(strlen($angka[$keys[$k]])>1 && strlen($angka[$keys[$k-1]])==1){ //buka sub baru echo "<li><ul>"; echo "<li>ini buka sub</li>"; } else if(strlen($angka[$keys[$k]])>1 && strlen($angka[$keys[$k-1]])>1 && strlen($angka[$keys[$k+1]])>1){ //ini masih di dalem sub echo "<li>ini sub tengah</li>"; } else if(strlen($angka[$keys[$k]])>1 && strlen($angka[$keys[$k-1]])>1 && ($k<=$hitung || strlen($angka[$keys[$k+1]])==1)){ //akhir sub, tutup echo "<li>ini sub akhir</li>"; echo "</ul></li>"; } } echo "</ul>"; 有效地加入数据集。将'data.frame'转换为'data.table data.table setDT(df1)( setkey(..,startTime,Hour)`),使用'startTime'的唯一值组合加入'小时',并将延迟时的NA值替换为'0'

), set the key columns (

或者使用library(data.table) setkey(setDT(df1), startTime, Hour)[CJ(startTime=unique(startTime), Hour=min(Hour):max(Hour))][is.na(delay), delay:=0L] # startTime Hour delay #1: 04-22 0 10 #2: 04-22 1 10 #3: 04-22 2 0 #4: 04-22 3 10 #5: 04-22 4 10 中的merge/expand.grid,我们可以获得上述结果

base R

答案 1 :(得分:2)

使用dplyr和zoo:

library(dplyr)
library(zoo) #na.locf

#dummy data
df1 <- read.table(text="   startTime  Hour  delay
   04-22      0     10
                  04-22      1     10
                  04-22      3     10
                  04-22      4     10",header=TRUE)

#result
full_join(df1,data.frame(Hour=0:23),
          by="Hour") %>% 
  arrange(Hour,startTime) %>% 
  mutate(startTime=na.locf(startTime),
         delay=ifelse(is.na(delay),0,delay))