R 空气质量数据日期格式化的函数编程

R 空气质量数据日期格式化的函数编程,r,timestamp,posix,date-formatting,particles,R,Timestamp,Posix,Date Formatting,Particles,刚接触编程的环境科学研究员,对我放松点 我有两个空气质量仪器(dusttrak和ptrak),它们记录数据并将其存储为.csv文件。我的目标是通过函数式编程自动化数据清理过程。每个仪器以不同的时间间隔(30秒vs 1秒)进行记录,并且每个仪器都有一个唯一的标题 我已经有了一个读取ptrak数据的函数。它删除讨厌的标题,并将日期和时间列转换为as.POSIX datetime。结果是一个新的宽格式数据帧,只有两列,datetime和particle number concentration(pnc

刚接触编程的环境科学研究员,对我放松点

我有两个空气质量仪器(dusttrak和ptrak),它们记录数据并将其存储为.csv文件。我的目标是通过函数式编程自动化数据清理过程。每个仪器以不同的时间间隔(30秒vs 1秒)进行记录,并且每个仪器都有一个唯一的标题

我已经有了一个读取ptrak数据的函数。它删除讨厌的标题,并将日期和时间列转换为as.POSIX datetime。结果是一个新的宽格式数据帧,只有两列,datetime和particle number concentration(pnc)

以下是ptrak函数:

## assume there is only one file per directory for now
read.ptrak<-function(fpath){
    x<-read.csv(fpath,skip=30,header=FALSE,stringsAsFactors=FALSE) #removing the first 30 rows of garbage
    colnames(x) <- c("date","time","pnc") #creating my own header
    ##merge date and time column together
    x$datetime<-strptime(paste(x$date,x$time), "%m/%d/%Y %H:%M:%S", tz="UTC")
    ## convert the first column to a posix timestamp
    x$datetime<-as.POSIXct(x$datetime,format=dt_format, tz="UTC")
    x<-x[,-c(1:2)] ## remove redundant variables date, and time
    x<-x[,c(2:1)] ## reorder columns so datetime is first
    return(x)
}

#okay now we can apply our function to our ptrak csv file:
ptrak_data <- read.ptrak(**INSERT FILE PATH HERE**)
head(ptrak_data)
#everything looks great!
##假设目前每个目录只有一个文件

read.ptrak这是一个非常简单的问题,假设每个文件的标题中有固定数量的行。POSIXct对象是自开始以来的秒数。由于数据是以秒为单位的,因此只需将经过的时间添加到开始时间即可

我读了两行,上面写着开始日期和时间。将这些值粘贴在一起并转换为datetime对象,然后读入剩余的数据。将经过的时间添加到开始时间,您就可以开始了

#pratice<-readLines("dusttrak_data.csv")
#get start time and date then convert to POSIXct object
stime<-read.csv("dusttrak_data.csv", header = FALSE, nrow=1, skip=6)
sdate<-read.csv("dusttrak_data.csv", header = FALSE, nrow=1, skip=7)

#read data, and add elasped time to start time
startDate<-as.POSIXct(paste(sdate$V2, stime$V2), "%m/%d/%Y %I:%M:%S %p", tz="EST")
df<-sdate<-read.csv("dusttrak_data.csv",   skip=36)
names(df)<-c("elapsedtime", "PM1", "PM2.5", "PM4", "PM10", "TOTAL", "Alarms", "Errors")
df$elapsedtime<-df$elapsedtime+startDate
#removed columns 7 and 8
df<-df[,-c(7:8)]

#练习回答。我完全遵循了您的代码,虽然它不会产生任何错误,但我的“elapsedtime”向量中填充了NAs。我正在玩弄时区参数,以及posix字符串,但到目前为止我还没有任何运气。您最初也遇到过这个问题吗?我从我的工作空间复制并粘贴了这个文件,处理下载的文件。我会检查一下起始日期是否正确。如果时区不正确,它可能会生成警告,并将导致NA。通过一些小的调整,您的代码可以节省时间!非常感谢!我需要更改以下内容:
dft这是一个非常复杂的问题,要求很多。我建议您将这个问题编辑为一个问题,重点可能是一个POSIX转换。我认为如果你的问题更加集中(甚至提到Ptrak数据,更不用说包括它了,相关吗?)你会更成功地获得帮助。我感谢你的意见。我想将ptrak函数作为一种说明我处理该问题的一般方法的方式,希望为其他人提供一个框架,以便在帮助操作dusttrak数据时使用。谢天谢地,Dave2e的波长与我相似,能够提供一个聪明的解决方案。我已经添加了一个完整的解决方案,以编辑在我原来的职位转换成一个功能他的解决方案!
read.dtrak<-function(fpath){
    sdate<-read.csv(fpath, header=FALSE, nrow=1, skip =7)
    stime <-read.csv(fpath, header = FALSE, nrow=1, skip=8)  
    startDate<-as.POSIXct(paste(sdate$V2, stime$V2), "%m/%d/%Y %H:%M:%S", tz="UTC")
    x<-read.csv(fpath, skip=36, stringsAsFactors = FALSE)
    names(x)<-c("elapsedtime","pm1","pm2.5","pm4","pm10","total","alarms","errors")
    x$elapsedtime<-x$elapsedtime+startDate
    x<-x[,-c(7,8)] #remove the alarms and errors variables
    names(x$elapsedtime)<-"datetime" #rename timestamp to datetime
    return(x)
}

read.dtrak("**INSERT FILE PATH HERE**")
#pratice<-readLines("dusttrak_data.csv")
#get start time and date then convert to POSIXct object
stime<-read.csv("dusttrak_data.csv", header = FALSE, nrow=1, skip=6)
sdate<-read.csv("dusttrak_data.csv", header = FALSE, nrow=1, skip=7)

#read data, and add elasped time to start time
startDate<-as.POSIXct(paste(sdate$V2, stime$V2), "%m/%d/%Y %I:%M:%S %p", tz="EST")
df<-sdate<-read.csv("dusttrak_data.csv",   skip=36)
names(df)<-c("elapsedtime", "PM1", "PM2.5", "PM4", "PM10", "TOTAL", "Alarms", "Errors")
df$elapsedtime<-df$elapsedtime+startDate
#removed columns 7 and 8
df<-df[,-c(7:8)]