我是新的R和我有一些问题与padr包描述的这里。
我有一个小时数据集,它是缺少的小时,我想插入一行来输入缺失数据的值。我正在尝试使用padr包中的pad函数和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打包后需要一个datetime 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现在我尝试使用pad函数,就像上面提供的链接中的指令一样。我的代码是:
Mendo_padded <- Mendo %>% pad我得到了一个错误:
if (total_invalid == nrow(x)) {:缺失值(除了警告消息: if (唯一(nchar(X_char)) == 10) ){:条件长度>1并且只使用第一个元素时出错
如果这是可行的,那么我将使用命令
Mendo_padded %>% fill_by_value(Sample.Measurement, value = 999)以获得所有丢失的小时Sample.Measurement值为999。
我想要反馈,建议或评论,我可能做错了什么,我如何才能让这段代码工作!谢谢!
发布于 2017-06-30 03:13:41
pad似乎可以自动检测日期/ POSIXct / POSIXlt类型的列,因此不需要向pad提供Mendo$Time.Local。填充物将每隔一小时施加一次。
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建议的,在pad之前应该使用na.omit,以避免日期列中的NA值。
https://stackoverflow.com/questions/44814135
复制相似问题