我如何准备一些值与分组非常不同的数据?
How can I prepare the data that some values are very different to group?
有些值与组中的值非常不同,因为缺少行并且数据不连续使我的 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
可以看到Date(hour;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
有些值与组中的值非常不同,因为缺少行并且数据不连续使我的 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
可以看到Date(hour;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