首页 > 解决方案 > 删除时间序列中不是实际日期的 NA 值

问题描述

我正在使用一些时间序列数据,其中有一些 NA 值。数据如下:

58 27/2/2001   22
59 28/2/2001   25
60 29/2/2001 <NA>
61 30/2/2001 <NA>
62 31/2/2001 <NA>
63  1/3/2001   19

NA 值出现在月底,所以在 2 月我有 2 月 29 日、30 日和 31 日的 NA。我想删除这些值,但是简单地使用是na.omit行不通的,因为我在数据中有一些其他的 NA 值。

如何删除与不是实际日期相对应的 NA 值?

数据:

structure(list(date = c("1/1/2001", "2/1/2001", "3/1/2001", "4/1/2001", 
"5/1/2001", "6/1/2001", "7/1/2001", "8/1/2001", "9/1/2001", "10/1/2001", 
"11/1/2001", "12/1/2001", "13/1/2001", "14/1/2001", "15/1/2001", 
"16/1/2001", "17/1/2001", "18/1/2001", "19/1/2001", "20/1/2001", 
"21/1/2001", "22/1/2001", "23/1/2001", "24/1/2001", "25/1/2001", 
"26/1/2001", "27/1/2001", "28/1/2001", "29/1/2001", "30/1/2001", 
"31/1/2001", "1/2/2001", "2/2/2001", "3/2/2001", "4/2/2001", 
"5/2/2001", "6/2/2001", "7/2/2001", "8/2/2001", "9/2/2001", "10/2/2001", 
"11/2/2001", "12/2/2001", "13/2/2001", "14/2/2001", "15/2/2001", 
"16/2/2001", "17/2/2001", "18/2/2001", "19/2/2001", "20/2/2001", 
"21/2/2001", "22/2/2001", "23/2/2001", "24/2/2001", "25/2/2001", 
"26/2/2001", "27/2/2001", "28/2/2001", "29/2/2001", "30/2/2001", 
"31/2/2001", "1/3/2001", "2/3/2001", "3/3/2001", "4/3/2001", 
"5/3/2001", "6/3/2001", "7/3/2001", "8/3/2001", "9/3/2001", "10/3/2001", 
"11/3/2001", "12/3/2001", "13/3/2001", "14/3/2001", "15/3/2001", 
"16/3/2001", "17/3/2001", "18/3/2001", "19/3/2001", "20/3/2001", 
"21/3/2001", "22/3/2001", "23/3/2001", "24/3/2001", "25/3/2001", 
"26/3/2001", "27/3/2001", "28/3/2001", "29/3/2001", "30/3/2001", 
"31/3/2001", "1/4/2001", "2/4/2001", "3/4/2001", "4/4/2001", 
"5/4/2001", "6/4/2001", "7/4/2001", "8/4/2001", "9/4/2001", "10/4/2001", 
"11/4/2001", "12/4/2001", "13/4/2001", "14/4/2001", "15/4/2001", 
"16/4/2001", "17/4/2001", "18/4/2001", "19/4/2001", "20/4/2001", 
"21/4/2001", "22/4/2001", "23/4/2001", "24/4/2001", "25/4/2001", 
"26/4/2001", "27/4/2001", "28/4/2001", "29/4/2001", "30/4/2001", 
"31/4/2001", "1/5/2001", "2/5/2001", "3/5/2001", "4/5/2001", 
"5/5/2001", "6/5/2001", "7/5/2001", "8/5/2001", "9/5/2001", "10/5/2001", 
"11/5/2001", "12/5/2001", "13/5/2001", "14/5/2001", "15/5/2001", 
"16/5/2001", "17/5/2001", "18/5/2001", "19/5/2001", "20/5/2001", 
"21/5/2001", "22/5/2001", "23/5/2001", "24/5/2001", "25/5/2001", 
"26/5/2001", "27/5/2001", "28/5/2001", "29/5/2001", "30/5/2001", 
"31/5/2001", "1/6/2001", "2/6/2001", "3/6/2001", "4/6/2001", 
"5/6/2001", "6/6/2001", "7/6/2001", "8/6/2001", "9/6/2001", "10/6/2001", 
"11/6/2001", "12/6/2001", "13/6/2001", "14/6/2001", "15/6/2001", 
"16/6/2001", "17/6/2001", "18/6/2001", "19/6/2001", "20/6/2001", 
"21/6/2001", "22/6/2001", "23/6/2001", "24/6/2001", "25/6/2001", 
"26/6/2001", "27/6/2001", "28/6/2001", "29/6/2001", "30/6/2001", 
"31/6/2001", "1/7/2001", "2/7/2001", "3/7/2001", "4/7/2001", 
"5/7/2001", "6/7/2001", "7/7/2001", "8/7/2001", "9/7/2001", "10/7/2001", 
"11/7/2001", "12/7/2001", "13/7/2001", "14/7/2001", "15/7/2001", 
"16/7/2001", "17/7/2001", "18/7/2001", "19/7/2001", "20/7/2001", 
"21/7/2001", "22/7/2001", "23/7/2001", "24/7/2001", "25/7/2001", 
"26/7/2001", "27/7/2001", "28/7/2001", "29/7/2001", "30/7/2001", 
"31/7/2001", "1/8/2001", "2/8/2001", "3/8/2001", "4/8/2001", 
"5/8/2001", "6/8/2001", "7/8/2001", "8/8/2001", "9/8/2001", "10/8/2001", 
"11/8/2001", "12/8/2001", "13/8/2001", "14/8/2001", "15/8/2001", 
"16/8/2001", "17/8/2001", "18/8/2001", "19/8/2001", "20/8/2001", 
"21/8/2001", "22/8/2001", "23/8/2001", "24/8/2001", "25/8/2001", 
"26/8/2001", "27/8/2001", "28/8/2001", "29/8/2001", "30/8/2001", 
"31/8/2001", "1/9/2001", "2/9/2001", "3/9/2001", "4/9/2001", 
"5/9/2001", "6/9/2001", "7/9/2001", "8/9/2001", "9/9/2001", "10/9/2001", 
"11/9/2001", "12/9/2001", "13/9/2001", "14/9/2001", "15/9/2001", 
"16/9/2001", "17/9/2001", "18/9/2001", "19/9/2001", "20/9/2001", 
"21/9/2001", "22/9/2001", "23/9/2001", "24/9/2001", "25/9/2001", 
"26/9/2001", "27/9/2001", "28/9/2001", "29/9/2001", "30/9/2001", 
"31/9/2001", "1/10/2001", "2/10/2001", "3/10/2001", "4/10/2001", 
"5/10/2001", "6/10/2001", "7/10/2001", "8/10/2001", "9/10/2001", 
"10/10/2001", "11/10/2001", "12/10/2001", "13/10/2001", "14/10/2001", 
"15/10/2001", "16/10/2001", "17/10/2001", "18/10/2001", "19/10/2001", 
"20/10/2001", "21/10/2001", "22/10/2001", "23/10/2001", "24/10/2001", 
"25/10/2001", "26/10/2001", "27/10/2001", "28/10/2001", "29/10/2001", 
"30/10/2001", "31/10/2001", "1/11/2001", "2/11/2001", "3/11/2001", 
"4/11/2001", "5/11/2001", "6/11/2001", "7/11/2001", "8/11/2001", 
"9/11/2001", "10/11/2001", "11/11/2001", "12/11/2001", "13/11/2001", 
"14/11/2001", "15/11/2001", "16/11/2001", "17/11/2001", "18/11/2001", 
"19/11/2001", "20/11/2001", "21/11/2001", "22/11/2001", "23/11/2001", 
"24/11/2001", "25/11/2001", "26/11/2001", "27/11/2001", "28/11/2001", 
"29/11/2001", "30/11/2001", "31/11/2001", "1/12/2001", "2/12/2001", 
"3/12/2001", "4/12/2001", "5/12/2001", "6/12/2001", "7/12/2001", 
"8/12/2001", "9/12/2001", "10/12/2001", "11/12/2001", "12/12/2001", 
"13/12/2001", "14/12/2001", "15/12/2001", "16/12/2001", "17/12/2001", 
"18/12/2001", "19/12/2001", "20/12/2001", "21/12/2001", "22/12/2001", 
"23/12/2001", "24/12/2001", "25/12/2001", "26/12/2001", "27/12/2001", 
"28/12/2001", "29/12/2001", "30/12/2001", "31/12/2001"), var1 = c(NA, 
NA, "16", "17", "16", "15", "19", "27", "26", "31", "17", "27", 
"43", "39", "25", "19", "19", "18", "32", "43", "46", "38", "17", 
"19", "16", "12", "20", "15", "30", "52", "52", "43", "53", "47", 
"23", "21", "26", "16", "20", "20", "19", "44", "45", "43", "24", 
"22", "30", "36", "26", "23", "44", "58", "71", "54", "23", "15", 
"27", "22", "25", NA, NA, NA, "19", "17", "13", "11", "17", "21", 
"17", "14", "14", "12", "14", "21", "19", "28", "21", "15", "10", 
"8", "9", "14", "11", "15", "32", "13", "7", "10", "14", "16", 
"14", "16", "18", "10", "15", "12", "11", "9", "17", "9", "8", 
"18", "17", "10", "6", "7", "7", "10", "20", "12", "13", "17", 
"13", "14", "14", "11", "11", "13", "15", "15", "12", "17", "11", 
NA, "7", "9", "17", "19", "14", "10", "13", "20", "13", "16", 
"26", "26", "9", "11", "8", "13", "14", "12", "9", "8", "12", 
"13", "15", "15", "16", "13", "9", "24", "19", "18", "20", "15", 
"13", "14", "17", "18", "13", "15", "21", "9", "5", "12", "12", 
"17", "18", "14", "9", "9", "12", "27", "33", "32", "23", "23", 
"20", "17", "16", "14", "14", "24", "24", NA, "24", "18", "16", 
"15", "13", "12", "13", "10", "12", "17", "24", "19", "23", "11", 
"8", "10", "10", "8", "9", "13", "16", "12", "17", "14", "15", 
"13", "12", "9", "6", "12", "11", "11", "8", "10", "7", "6", 
"14", "11", "10", "9", "9", "6", "7", "9", "8", "8", "8", "8", 
"7", "7", "16", "19", "16", "24", "29", "12", "7", "11", "9", 
"9", "8", "9", "7", "11", "10", "10", "11", "10", "10", "14", 
"9", "11", "15", "15", "20", "21", "16", "10", "11", "17", "16", 
"13", "9", "6", "5", "9", "12", "17", "16", "9", "11", "10", 
NA, "16", "21", "13", "13", "17", "8", "7", "8", "11", "14", 
"12", "7", "7", NA, NA, "15", "10", "10", "9", "8", "8", "12", 
"11", "17", NA, NA, "22", "16", "24", "27", "24", "14", "21", 
"19", "12", "20", "22", "33", "36", "15", "17", "31", "46", "33", 
"17", "22", "20", "21", "25", "39", "34", "23", "30", "30", "39", 
"43", "38", "29", "51", "62", "55", NA, "31", "42", "53", "44", 
"77", "70", "66", "40", "25", "24", "22", "37", "54", "46", "21", 
"53", "43", "30", "31", "46", "41", "38", "16", "30", "29", "34", 
"65", "53", "35", "52", "45")), row.names = c(NA, 372L), class = "data.frame")

标签: r

解决方案


您可以使用as.Date转换为实际日期。任何无效的日期将自动强制为 NA。然后您可以使用is.na()过滤器,即

df[!is.na(as.Date(df$date, format = '%d/%m/%Y')),]

推荐阅读