r - 如何准备某些值与分组非常不同的数据?



有些值与组非常不同,因为缺少行并且数据不连续,这使我的diffVal不寻常。

> df
Date diffVal1 diffVal2
1  2017-05-31 04:01:00      718      483
2  2017-05-31 05:01:00      704      477
3  2017-05-31 06:01:00      741      478
4  2017-05-31 07:01:00      874      483
5  2017-05-31 08:01:00      907      495
6  2017-05-31 09:01:00      887      510
7  2017-05-31 10:01:00     2922      514
8  2017-05-31 13:01:00     1012      529
9  2017-05-31 14:01:00      979      539
10 2017-05-31 15:01:00      886      485
11 2017-05-31 16:01:00      818      471

您可以看到日期(小时;11,12)我需要将异常值平滑为正常值。

我正在尝试将异常值设置为 NULL,但问题是如果它是我的示例数据框,我如何将大数据框中的数据框中有异常值,我可以将超过 1200 的数据设置为 NA(这根本不是好主意,因为它不合理。 然后使用近似的 NA 值函数na.approx(),我稍后必须得到这些图。

df$diffVal1 <- ifelse((df$diffVal1>1300), NA,df$diffVal1)
df$diffVal1 <- na.approx(df$diffVal1)
> df 
Date diffVal1 diffVal2
1  2017-05-31 04:01:00    718.0      483
2  2017-05-31 05:01:00    704.0      477
3  2017-05-31 06:01:00    741.0      478
4  2017-05-31 07:01:00    874.0      483
5  2017-05-31 08:01:00    907.0      495
6  2017-05-31 09:01:00    887.0      510
7  2017-05-31 10:01:00    949.5      514
8  2017-05-31 13:01:00   1012.0      529
9  2017-05-31 14:01:00    979.0      539
10 2017-05-31 15:01:00    886.0      485
11 2017-05-31 16:01:00    818.0      471

这个问题应该怎么做?以及如何按日期添加缺失的行以近似再次添加?

非常感谢您的帮助。

告诉我这是否适合您:

数据准备 :

df <- read.table(text="Date; diffVal1; diffVal2
1;  2017-05-31 04:01:00;      718;      483
2;  2017-05-31 05:01:00;      704;      477
3;  2017-05-31 06:01:00;      741;      478
4;  2017-05-31 07:01:00;      874;      483
5;  2017-05-31 08:01:00;      907;      495
6;  2017-05-31 09:01:00;      887;      510
7;  2017-05-31 10:01:00;     2922;      514
8;  2017-05-31 13:01:00;     1012;      529
9;  2017-05-31 14:01:00;      979;      539
10; 2017-05-31 15:01:00;      886;      485
11; 2017-05-31 16:01:00;      818;      471",sep=";",header=TRUE,stringsAsFactors=FALSE)
df$Date     <- as.POSIXct(df$Date)
df$diffVal1 <- as.numeric(df$diffVal1)
df$diffVal2 <- as.numeric(df$diffVal2)
all_dates <- data.frame(Date = seq(min(df$Date),max(df$Date),by=3600))

工作和结果 :

df2 <- df
df2 <- df2[order(df2$Date,decreasing=TRUE),]
df2$Val1_total <-  cumsum(df2$diffVal1)
df2 <- merge(df2,all_dates,all.y = TRUE)
df2$Val1_total[is.na(df2$Val1_total)] <- approx(x = df2$Date, y = df2$Val1_total, xout = df2$Date[is.na(df2$Val1_total)])$y
df2$diffVal1 <- c(-diff(df2$Val1_total),tail(df2$diffVal1,1))
# > df2
# Date diffVal1 diffVal2 Val1_total
# 1  2017-05-31 04:01:00      718      483      11448
# 2  2017-05-31 05:01:00      704      477      10730
# 3  2017-05-31 06:01:00      741      478      10026
# 4  2017-05-31 07:01:00      874      483       9285
# 5  2017-05-31 08:01:00      907      495       8411
# 6  2017-05-31 09:01:00      887      510       7504
# 7  2017-05-31 10:01:00      974      514       6617
# 8  2017-05-31 11:01:00      974       NA       5643
# 9  2017-05-31 12:01:00      974       NA       4669
# 10 2017-05-31 13:01:00     1012      529       3695
# 11 2017-05-31 14:01:00      979      539       2683
# 12 2017-05-31 15:01:00      886      485       1704
# 13 2017-05-31 16:01:00      818      471        818

相关内容

  • 没有找到相关文章

最新更新