2017-04-17 5 views
0

私は、不注意な時間形式でデータをエクスポートする楽器を持っています。 datetimeのベクターを、POSIXctという形式の新しいdatetimeベクターに組み合わせる必要があります。%Y-%m-%d %H:%M:%Sです。私は、好奇心のために、as.POSIXct(),strftime()、およびstrptime()を使用して、3つの異なる方法でこれを実行しようとしました。私のの例データを使用しているときは、as.POSIXct()strftime()の機能しか使えませんが、なぜstrptime()NAsを生産しているのか不思議です。また、私は(私は唯一の行の最初をご提供してきましたその)私の実際のデータに、これらと同じ機能をしようとしたとき、私は... as.POSIXct()を使用してPOSIXctオブジェクトにdatetimeを文字からPOSIXctオブジェクトに変換する

strftime()出力を変換することはできませんまったく別の問題に遭遇します。 strftime()機能のみが動作しています。私は実際にPOSIXctオブジェクトに私のdatetimeを変換するために必要な唯一のコマンドですas.POSIXct()機能もNAsを生産しているいくつかの理由で、...

のために、これらの機能の間の微妙な違いがあるようだ、と私が知りたいですそれらをより効果的に使用する方法。ありがとう!

## Reading in the file: 
fpath <- "~/real_data.txt" 
x <- read.csv(fpath, skip = 1, header = FALSE, sep = "", stringsAsFactors = FALSE) 
names(x) <- c("date","time","bscat","scat_coef","pressure_mbar","temp_K","CH1","CH2") ## This is data from a Radiance Research Integrating Nephelometer Model M903 for anyone who is interested! 

## If anyone could get this to work that would be awesome! 
x$datetime1 <- as.POSIXct(paste(x$date, x$time), format = "%Y-%m-%d %H:%M%:%S", tz = "UTC") 

## This still doesn't work... 
x$datetime2 <- strptime(paste(x$date, x$time), format = "%Y-%m-%d %H:%M%:%S", tz = "UTC") 

## This works: 
x$datetime3 <- strftime(paste(x$date, x$time), format = "%Y-%m-%d %H:%M%:%S", tz = "UTC") 

## But I cannot convert from strftime character to POSIXct object, so it doesn't help me at all... 
x$datetime4 <- as.POSIXct(x$datetime3, format = "%Y-%m-%d %H:%M%:%S", tz = "UTC")  

head(x) 
real_data.txtを使用して here

例:

再現例:

## Creating dataframe: 
date <- c("2017-04-14", "2017-04-14","2017-04-14","2017-04-14") 
time <- c("14:24:24.992000","14:24:25.491000","14:24:26.005000","14:24:26.511000") 
value <- c("4.106e-06","4.106e-06","4.106e-06","4.106e-06") 
data <- data.frame(date, time) 
data <- data.frame(data, value) ## I'm sure there is a better way to combine three vectors... 
head(data) 

## Creating 3 different datetime vectors: 

## This works in my example code, but not with my real data... 
data$datetime1 <- as.POSIXct(paste(data$date, data$time), format = "%Y-%m-%d %H:%M:%S",tz="UTC") 
class(data$datetime1) 

## This is producing NAs, and I'm not sure why: 
data$datetime2 <- strptime(paste(data$date, data$time), format = "%Y-%m-%d %H:%M%:%S", tz = "UTC") 
class(data$datetime2) 

## This is working just fine 
data$datetime3 <- strftime(paste(data$date, data$time), format = "%Y-%m-%d %H:%M%:%S", tz = "UTC") 
class(data$datetime3) 
head(data) 

## Since I cannot get the as.POSIXct() function to work with my real data, I tried this workaround. Unfortunately I am running into trouble... 
data$datetime4 <- as.POSIXct(x$datetime3, format = "%Y-%m-%d %H:%M%:%S", tz = "UTC") 

リンク実際のデータへ

ソリューション:

私は正しいフォーマット文字列でas.POSIXct()機能を提供していませんでした。 %Y-%m-%d %H:%M%:%S%Y-%m-%d %H:%M:%Sに変更すると、data$datetime2data$datetime4x$datetime1x$datetime2が正しく機能していました。デバッグのためのPhilCへの大きな感謝!

答えて

1

%m%m%を置き換える:

## Reading in the file: 
fpath <- "c:/r/data/real_data.txt" 
x <- read.csv(fpath, skip = 1, header = FALSE, sep = "", stringsAsFactors = FALSE) 
names(x) <- c("date","time","bscat","scat_coef","pressure_mbar","temp_K","CH1","CH2") ## This is data from a Radiance Research Integrating Nephelometer Model M903 for anyone who is interested! 

## issue was the %m% - fixed 
x$datetime1 <- as.POSIXct(paste(x$date, x$time), format = "%Y-%m-%d %H:%M:%S", tz = "UTC") 

## Here too - fixed 
x$datetime2 <- strptime(paste(x$date, x$time), format = "%Y-%m-%d %H:%M:%S", tz = "UTC") 
head(x) 
私の部分にタイプミスだった
+0

**ありがとうございました!**私の脳は私のトリックを演奏していました!何らかの理由で私はそれを見ることができませんでしたが、あなたがそれを指摘したので、それはとても明らかです!私は今休憩するつもりだと思う – spacedSparking

1

NAsを引き起こすフォーマット文字列エラーがありました。これを試してください:あなたの本当のデータの問題については

## This is no longer producing NAs: 
data$datetime2 <- strptime(paste(data$date, data$time), format = "%Y-%m-%d %H:%M:%S",tz="UTC") 
class(data$datetime2) 
+0

おっと、そのスポッティングに感謝を!私は私の例を修正しました。つまり、実際に使用していたスクリプトは正しくフォーマットされていて、依然としてNAsを生成しています。 – spacedSparking

+0

修正したバージョンをエラーなしで実行しました。エラーに寄与していた隠れた文字が関数呼び出しにありました。答えから切り取って貼り付けると、それは動くはずです(それは私のためでした)。 PC – PhilC

+0

うわー!うん、これは私のために働いている!隠された文字を言うと、私の日時変換に影響を与えている元のスクリプトに表示されていないコードがあることを意味しますか?今私は* real_data.txt *の例でこれを動作させる方法を見つける必要があります。 – spacedSparking

関連する問題