gpt4 book ai didi

R-从数据框中查找缺失值并在该位置插入值

转载 作者:行者123 更新时间:2023-12-02 06:36:09 25 4
gpt4 key购买 nike

我使用 R 脚本从数据库中读取值。这些值包含以下数据框。

>values #return the output as follows

ID Date Hour Value
1 2013-06-01 8 9
2 2013-06-01 9 17
3 2013-06-01 10 16
4 2013-06-01 11 21
5 2013-06-01 12 19
6 2013-06-01 13 15
7 2013-06-01 14 14
8 2013-06-01 15 14
9 2013-06-01 16 21
10 2013-06-01 17 22
11 2013-06-01 18 13
12 2013-06-01 19 2
13 2013-06-01 20 2
14 2013-06-01 21 1
15 2013-06-01 22 1
16 2013-06-01 23 1
17 2013-06-02 0 0
18 2013-06-02 1 0
19 2013-06-02 2 0
20 2013-06-02 3 1
21 2013-06-02 4 0
22 2013-06-02 5 0
23 2013-06-02 6 1
24 2013-06-02 7 1
25 2013-06-02 8 20
26 2013-06-02 9 21
27 2013-06-02 10 21
28 2013-06-02 11 15
29 2013-06-02 12 12
30 2013-06-02 13 11
31 2013-06-02 14 10
32 2013-06-02 15 16
33 2013-06-02 16 21
34 2013-06-02 17 22
35 2013-06-02 18 18
36 2013-06-02 19 9
37 2013-06-02 20 2
38 2013-06-02 21 0
39 2013-06-02 23 0

我想找出数据框中缺失的小时数,并将 0 添加到该日期缺失小时的值中。
示例:
从上面的数据框, 日期 2013-06-02 缺少小时 22。我想在 21 点和 23 点之间插入一行

ID           Date      Hour      Value
39 2013-06-02 22 0

我怎样才能做到这一点?

我试过如下:

我有一个小时列表作为

>hours<-c(0:23)
> hours #return as follows
[1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

>i<-values$Hour[1]+1
>count<-nrow(values)
>for(j in 1:count){
+h<-values$Hour[j]
+hr<-hours[i]
+if(h != hr)
+{
+#write code to insert row
+}
+i<-i+1
+if(i==25)
+{
+i<-c(1)
+}
+}

请帮帮我...

最佳答案

下面是使用 data.table 的方法:

require(data.table) 
# install the package and then load if you don't have it already
dt <- data.table(values, key="Hour")
out <- merge(dt[, .SD[J(Hour[1]:23), roll=-Inf], by=Date,
.SDcols = c("Hour", "ID")], dt[, list(Date, Hour, Value)],
by=c("Date", "Hour"), all=TRUE)[is.na(Value), Value := 0L]

解释:您的问题有点不同/复杂,因为 1) 您似乎只想在缺失值发生在中间而不是其他任何地方(开始或结束)时填充缺失值,以及 2) 您想要填充缺失值ID 的值与最后一个未丢失的 ID 的值相同(这可以通过 roll 完成),但您想要填充与缺失的 ID 相对应的 Value 为 0(无法通过 roll 完成)。

因此,我们的想法是首先使用 roll=-Inf 获取 ID 的缺失值。这是通过语句完成的:

dt[, .SD[J(Hour[1]:23), roll=-Inf], by=Date, .SDcols = c("Hour", "ID")]

这是在将键设置为 Hour 之后。

现在,我们需要为新添加的 ID 获取 ValueNA。因此,我们将其mergedt(删除了ID,因为我们已经处理过了)。这是通过以下方式完成的:

dt[, list(Date, Hour, Value)]

一旦我们有了这些,我们就Date, Hourmerge 并使用参数all=TRUE 来填充缺失值以及。最后,我们将 Value 的任何 NA 替换为 0。

关于R-从数据框中查找缺失值并在该位置插入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18333518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com