使用 padr 包在 R 中的缺失每小时数据中插入行 - 奇怪的错误
Inserting Row in Missing Hourly Data in R using padr package - weird error
我是 R 的新手,我遇到了 here.
中描述的 padr 包的一些问题
我有一个小时数据集缺少小时数,我想插入一行以输入缺失数据的值。我正在尝试使用 pad 函数和 padr 包中的 fill_by_value 函数,但是当我使用 pad 函数时出现错误。
名为Mendo的数据呈现为:
Date.Local Time.Local Sample.Measurement
2016-01-01 00:00:00 3
2016-01-01 00:01:00 4
2016-01-01 00:02:00 1
2016-01-01 00:04:00 4
2016-01-01 00:05:00 5
我希望最终数据如下所示:
Date.Local Time.Local Sample.Measurement
2016-01-01 00:00:00 3
2016-01-01 00:01:00 4
2016-01-01 00:02:00 1
2016-01-01 00:03:00 999
2016-01-01 00:04:00 4
2016-01-01 00:05:00 5
我的印象是打包的 padr 需要日期时间 POSIXct 列,所以我使用命令
Mendo$Time.Local <- as.POSIXct(paste(Mendo$Date.Local, Mendo$Time.Local), format = '%Y-%m-%d %H:%M')
获得:
Time.Local Sample.Measurement
2016-01-01 00:00:00 3
2016-01-01 00:01:00 4
2016-01-01 00:02:00 1
2016-01-01 00:04:00 4
2016-01-01 00:05:00 5
现在我尝试像上面提供的link中的指令一样使用pad功能。我的代码行是:
Mendo_padded <- Mendo %>% pad
我收到错误:
Error in if (total_invalid == nrow(x)) { :
missing value where TRUE/FALSE needed
In addition: Warning message:
In if (unique(nchar(x_char)) == 10) { :
the condition has length > 1 and only the first element will be used
如果这行得通,我会使用命令
Mendo_padded %>% fill_by_value(Sample.Measurement, value = 999)
将所有缺失的小时 Sample.Measurement 值设为 999。
我很乐意就我可能做错的地方以及如何让此代码正常工作提供反馈、建议或评论!谢谢!
似乎pad
可以自动检测哪一列是Date/POSIXct/POSIXlt类型,所以你不需要提供Mendo$Time.Local
到pad
。填充将按小时间隔应用。
library(magrittr)
library(padr)
PM10 <- read.csv(file="../Downloads/hourly_81102_2016.csv",
stringsAsFactors = FALSE) # don't change the columns to factors
Mendo <- PM10[PM10$County.Name == "Mendocino",]
Mendo$Time.Local <-
as.POSIXct(paste(
Mendo$Date.Local, Mendo$Time.Local), format = '%Y-%m-%d %H:%M')
Mendo <- Mendo[,c("Time.Local", "Sample.Measurement")]
# remove Mendo$Time.Local
Mendo_padded <- Mendo %>% na.omit %>%
pad(interval = 'hour',
start_val = NULL, end_val = NULL, group = NULL,
break_above = 1)
您也可以考虑使用 Time.GMT
和 Date.GMT
列,因为日期和时间可能取决于您(您的计算机)所在的位置。
编辑: 根据 OP 的建议,na.omit
应该在 pad
之前使用,以避免日期列中出现 NA 值。
我是 R 的新手,我遇到了 here.
中描述的 padr 包的一些问题我有一个小时数据集缺少小时数,我想插入一行以输入缺失数据的值。我正在尝试使用 pad 函数和 padr 包中的 fill_by_value 函数,但是当我使用 pad 函数时出现错误。
名为Mendo的数据呈现为:
Date.Local Time.Local Sample.Measurement
2016-01-01 00:00:00 3
2016-01-01 00:01:00 4
2016-01-01 00:02:00 1
2016-01-01 00:04:00 4
2016-01-01 00:05:00 5
我希望最终数据如下所示:
Date.Local Time.Local Sample.Measurement
2016-01-01 00:00:00 3
2016-01-01 00:01:00 4
2016-01-01 00:02:00 1
2016-01-01 00:03:00 999
2016-01-01 00:04:00 4
2016-01-01 00:05:00 5
我的印象是打包的 padr 需要日期时间 POSIXct 列,所以我使用命令
Mendo$Time.Local <- as.POSIXct(paste(Mendo$Date.Local, Mendo$Time.Local), format = '%Y-%m-%d %H:%M')
获得:
Time.Local Sample.Measurement
2016-01-01 00:00:00 3
2016-01-01 00:01:00 4
2016-01-01 00:02:00 1
2016-01-01 00:04:00 4
2016-01-01 00:05:00 5
现在我尝试像上面提供的link中的指令一样使用pad功能。我的代码行是:
Mendo_padded <- Mendo %>% pad
我收到错误:
Error in if (total_invalid == nrow(x)) { : missing value where TRUE/FALSE needed In addition: Warning message: In if (unique(nchar(x_char)) == 10) { : the condition has length > 1 and only the first element will be used
如果这行得通,我会使用命令
Mendo_padded %>% fill_by_value(Sample.Measurement, value = 999)
将所有缺失的小时 Sample.Measurement 值设为 999。
我很乐意就我可能做错的地方以及如何让此代码正常工作提供反馈、建议或评论!谢谢!
似乎pad
可以自动检测哪一列是Date/POSIXct/POSIXlt类型,所以你不需要提供Mendo$Time.Local
到pad
。填充将按小时间隔应用。
library(magrittr)
library(padr)
PM10 <- read.csv(file="../Downloads/hourly_81102_2016.csv",
stringsAsFactors = FALSE) # don't change the columns to factors
Mendo <- PM10[PM10$County.Name == "Mendocino",]
Mendo$Time.Local <-
as.POSIXct(paste(
Mendo$Date.Local, Mendo$Time.Local), format = '%Y-%m-%d %H:%M')
Mendo <- Mendo[,c("Time.Local", "Sample.Measurement")]
# remove Mendo$Time.Local
Mendo_padded <- Mendo %>% na.omit %>%
pad(interval = 'hour',
start_val = NULL, end_val = NULL, group = NULL,
break_above = 1)
您也可以考虑使用 Time.GMT
和 Date.GMT
列,因为日期和时间可能取决于您(您的计算机)所在的位置。
编辑: 根据 OP 的建议,na.omit
应该在 pad
之前使用,以避免日期列中出现 NA 值。