프로그래밍에 익숙하지 않은 환경 과학 연구원은 쉽게 나를 따라갑니다!날짜 형식 대기 질 데이터의 기능 프로그래밍
데이터를 로깅하고 .csv 파일로 저장하는 두 개의 대기 질 기기 (dusttrak 및 ptrak)가 있습니다. 필자의 목표는 함수 프로그래밍을 통해 데이터 정리 프로세스를 자동화하는 것입니다. 각 악기는 서로 다른 시간 간격 (30 초 vs 1 초)으로 기록하고 각 악기에는 고유 한 머리말이 있습니다.
이미 ptrak 데이터를 읽는 기능이 있습니다. 불쾌한 헤더를 지우고 날짜와 시간 컬럼을 하나의 as.POSIX datetime으로 변환합니다. 결과는 datetime 및 particle number concentration (pnc)의 두 개의 열만있는 새로운 와이드 형식 데이터 프레임입니다.
## 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!
내가 문제로 실행 해요 dusttrak 데이터입니다 :
다음은 ptrak 기능입니다. 각 관측마다 날짜 및 시간 열이있는 대신 머리글 내에 시작 시간 만 제공됩니다. 실제 데이터 프레임은이 시작 시간부터 30 초 간격으로 총 경과 시간 만 제공합니다. 필자는 POSIX 타임 스탬프와 5 개의 입자 질량 농도 (아래 참조)를 가지고 나중에 ptrak과 datetime으로 병합 할 수있는 새로운 데이터 프레임을 만들고 싶습니다. 누구든지 시작 시간과 경과 시간을 사용하여 새로운 날짜/시간 벡터를 생성 한 다음 헤더를 제거하여 두 개의 열이있는 와이드 형식 데이터 프레임을 남길 수있는 함수를 제공 할 수 있습니까?
가 여기에 dusttrak 데이터를 청소에서 내 첫 번째 시도이다 :
최종 목표는 대신 (PNC) 하나 개의 입자 수 농도를보고 제외하고는 ptrak 데이터와 유사한 청소 dataframe을 생산하는 것입니다read.dtrak<-function(fpath){
x<-read.csv(fpath,skip=36,header=FALSE,stringsAsFactors=FALSE)
colnames(x)<-c("elapsedtime","pm1","pm2.5","pm4","pm10","total","alarms","errors")
## need to read in the same file again and keep the header to extract the start time and start date:
y<-read.csv(fpath,skip=6,header=FALSE,stringsAsFactors=FALSE)
colnames(y)<-c("variable","value") ## somewhat arbitrary colnames for temporary df
starttime <-y[1,2]
startdate <-y[2,2]
startdatetime <- strptime(paste(startdate,starttime), "%m/%d/%Y %H:%M:%S", tz="UTC")
#convert to posix timestamp:
startdatetime <-as.POSIXct(startdatetime, format=dt_format, tz="UTC")
## create a new variable called datetime in dataframe 'x'
x$datetime <- startdatetime + x$elapsedtime ## this is giving me the following error: "Error in unclass(e1) + unclass(e2) : non-numeric argument to binary operator
return(x)
}
, PM1, PM2.5, PM4, PM10 및 TOTAL이 있어야합니다 (dusttrak_data.csv 참조).
게시물에 샘플 데이터를 포함하지 않기 때문에 미리 사과드립니다. 그 성가신 헤더를 포함하는 샘플 데이터를 작성하는 방법을 알 수 없었습니다!
이 질문에 대한 대답을 찾으면 본질적으로 +100 시간의 수동 데이터 정리 작업을 절약 할 수 있으므로 귀하의 통찰력에 진심으로 감사드립니다!
가 여기에 데이터의 : 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**")
이것은 매우 복잡하고 많은 질문을하고 있습니다.이 질문을 * POSIX 변환에 중점을 둔 * 단일 문제 *로 수정하는 것이 좋습니다. 귀하의 질문에 더 집중하면 도움을받을 수있을 것이라고 생각합니다. (심지어 Ptrak 데이터도 언급하고 있는데, 그보다는 덜 포함하고 있습니까?) – Gregor
귀하의 의견에 감사드립니다. 나는 먼지 트랙 데이터를 조작 할 때 다른 사람들이 사용할 프레임 워크를 제공하기 위해 문제에 대한 나의 일반적인 접근법을 설명하는 방법으로 ptrak 함수를 포함하고자했다. 고맙게도 Dave2e는 나와 비슷한 파장에 있었고 영리한 솔루션을 제공 할 수있었습니다. 자신의 솔루션을 함수로 변환하는 원래 게시물 내의 편집에 대한 전체 솔루션을 추가했습니다! – spacedSparking