用R做时深转换——学不好技术就累死计算机

数据时深转换

目标:将能谱的时间数据与综合录井仪器的深度数据进行对应。

备忘遇到的几个问题:

(1)日期时间数据的格式化

小厂的设备非常随意,能导出数据就不错了,所以各种格式五花八门,碰到我这个半灌水,只好来回折腾,不停的拆分、替换、合并、拆分。。。试用了pipeR企图减少变量的定义,不过也没用好,索性全部定义新变量了,这是吃错药的节奏啊,还好计算机没有生气。。。

(2)循环

这是我目前遇到最大的循环量,两个数据框,小数据框接近6k条数据,大数据框13w条数据,以小数据框的时间为标志,去找大数据框里对应的时间,问题是很可能没有可以完全对应的时间,因此,只能找两个数据框中时间间隔最小的那两条数据来对应。

(3)遗留问题

循环12min,获得5869个数值

发觉还至少存在两个问题。

第一个是没有考虑到longdata中如果存在时间段的缺失,是不是该抛弃shortdata中相应的那条数据。

第二个是按天取的时候,就存在一个如果shortdata中的时间是23:59:59,应该对应longdata中的23:58:20还是第二天的00:00:05的问题。暂时考虑不到怎么处理了。。。

=============

处理感言:学不好技术,就累死计算机吧,感谢稳定的xubuntu12.04+R3.1.0,一直没有罢工。

=============

以下是备忘的代码

============= ```{r Time-Depth Conversion}

##########
##数据准备
head(fenggu5gr)

# 2014.03.20-12:45:48
head(fenggu5log1)
# 03-25-2014 06:35:08

grtime <- as.character(fenggu5gr$time)

#将2014.03.20-12:45:48劈分成2014.03.20和12:45:48两部分
grdatetime <- sapply(grtime,function(x) return(strsplit(x,"-")))
grdate0 <- data.frame(sapply(grdatetime,function(v) return(v[1])))
grtime <- data.frame(time=sapply(grdatetime,function(v) return(v[2])))
#将2014.03.20改为2014-03-20
grdate1 <-data.frame(sapply(grdate0,function(x) return(gsub("\\.","-",x))))

#重新组合数据框

#同样处理log1中的日期时间数据
log1datetime <- as.character(fenggu5log1$time)
# log1datetime0 <- as.POSIXct(log1datetime,"%y/%m/%d %H:%M:%S")
#将m-d-y h-m-s劈分成date和time两部分
log1date0 <- sapply(log1datetime,function(x) return(strsplit(x," ") ))

#将处理好的数据存盘,避免数据处理过程中出现问题
write.csv(gr,file="gr.csv")
write.csv(log1,file="log1.csv")
#对比gr与log中的date和time,将最合适的time进行对应,以gr中的date和time为基准
##数据准备工作结束
#########################################
len_gr <- nrow(gr)
#按天取出数据进行循环,减少一点循环量
for (i in 1:len_gr) {
logtmp <- subset(log$datetime, log$date == as.character(gr$date[i]))
a = which.min(abs(difftime(logtmp, gr$datetime[i])))
b = logtmp[a]
result_time = append(result_time, b)
}
#循环12min,获得5869个数值
# 发觉还至少存在两个问题。
# 第一个是没有考虑到longdata中如果存在时间段的缺失,是不是该抛弃shortdata中相应的那条数据。
# 第二个是按天取的时候,就存在一个如果shortdata中的时间是23:59:59,应该对应longdata中的23:58:20还是第二天的00:00:05的问题。暂时考虑不到怎么处理了。。。

############
###移动平均平滑处理
library(TTR)
setwd("~/work/fenggu5gr")
result <- read.csv("result.csv")
r_total <- result[,c(6:9)]
r_end <- data.frame(apply(r_total,2,function(x) return(SMA(x,10))))

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注