我是R的新手,我在描述here的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需要一个日期时间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)){的错误: 缺少需要TRUE / FALSE的值 另外:警告信息: 在if(unique(nchar(x_char))== 10){: 条件的长度> 1,只使用第一个元素
如果这样做,我会使用命令
Mendo_padded %>% fill_by_value(Sample.Measurement, value = 999)
获取所有缺失的小时Sample.Measurement值为999。
我会喜欢有关我可能做错的反馈,建议或评论,以及如何让这段代码工作!谢谢!
答案 0 :(得分:0)
似乎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值。