填充未观察到的观察结果

时间:2019-09-10 14:54:24

标签: r

我想用观察日期和时间的频率制作一个时间序列。原始数据如下所示:

dd-mm-yyyy hh:mm
28-2-2018 0:12
28-2-2018 11:16
28-2-2018 12:12
28-2-2018 13:22
28-2-2018 14:23
28-2-2018 14:14
28-2-2018 16:24

R的日期和时间格式有误,因此我必须对其进行调整:

extracted_times <- as.POSIXct(bedrijf.CSV$viewed_at, format = "%d-%m-%Y %H:%M")    

我使用以下代码在表中按频率对数据进行排序:

timeserieswithoutzeros <- table(extracted_times)    

数据现在看起来像这样:

2018-02-28 00:11:00 2018-02-28 01:52:00 2018-02-28 03:38:00                   
                  1                   2                   5 
2018-02-28 04:10:00 2018-02-28 04:40:00 2018-02-28 04:45:00                  
                  2                   1                   1    

您可能会看到有很多未观察到的日期和时间。 我想以0的频率添加这些未观察到的日期和时间。 我尝试了完整函数,但错误指出它不能最好地使用,因为我使用了as.POSIXct()。 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

正如@ eric-lecoutre在评论中所提到的那样,您可以使用<DataGrid Name="PredicateStatementDataGrid" GridLinesVisibility="All" HeadersVisibility="All" AutoGenerateColumns="false"> <DataGrid.RowStyle> <Style TargetType="DataGridRow"> <Style.Triggers> <DataTrigger Binding="{Binding IsBold}" Value="true"> <Setter Property="Fontweight" Value="Bold"/> </DataTrigger> </Style.Triggers> </Style> <DataGrid.Columns> <DataGridTextColumn Header="ID #" Width="35" IsReadOnly="True" Binding="{Binding ID}"> </DataGridTextColumn> <DataGridTextColumn Header="Predicate Statement" Width="300" Binding="{Binding Statement}"> IsReadOnly="True"> </DataGridTextColumn> </DataGrid.Columns> </DataGrid> 将观察结果与最早开始于最后一个日期的序列结合起来,并使用频率表减去1。

seq

答案 1 :(得分:0)

以下可能是您想要的。
首先,将数据强制转换为"POSIXt"类,并以1分钟为步长创建minmax之间的所有日期/时间序列。

bedrijf.CSV$viewed_at <- as.POSIXct(bedrijf.CSV$viewed_at, format = "%d-%m-%Y %H:%M")
new <- seq(min(bedrijf.CSV$viewed_at), 
           max(bedrijf.CSV$viewed_at), 
           by = "1 mins")
tmp <- data.frame(viewed_at = new)

现在查看这些值是否在原始数据中。

tmp$viewed <- tmp$viewed_at %in% bedrijf.CSV$viewed_at
tbl <- xtabs(viewed ~ viewed_at, tmp)

sum(tbl != 0)
#[1] 7

最终清理。

rm(new, tmp)