我有一个日历天和每小时观察的数据框,其关联值如下:
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
答案 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))