9

与えられた文字列から日付を抽出するコードを書きました。与えられた

  > "Date: 2012-07-29, 12:59AM PDT"

抽出します

  > "2012-07-29" 

問題は、私のコードが長くて読みにくいように見えることです。これを行うためのよりエレガントな方法があるかどうか疑問に思いました。

  raw_date = "Date: 2012-07-29, 12:59AM PDT"

  #extract the string from raw date
  index = regexpr("[0-9]{4}-[0-9]{2}-[0-9]{2}", raw_date) #returns 'start' and 'end' to be used in substring

  start = index #start represents the character position 's'. start+1 represents '='
  end = attr(index, "match.length")+start-1
  date = substr(raw_date,start,end); date
4

4 に答える 4

11

strptime()時間オブジェクトを解析するために使用できます。

R> strptime("Date: 2012-07-29, 11:59AM PDT", "Date: %Y-%m-%d, %I:%M%p", tz="PDT")
[1] "2012-07-29 11:59:00 PDT"
R> 

午前12時59分が存在するかどうかわからないため、入力文字列をシフトしたことに注意してください...要点を証明するために、3時間シフトしました(秒で表され、基本単位):

R> strptime("Date: 2012-07-29, 11:59AM PDT", 
+>          "Date: %Y-%m-%d, %I:%M%p", tz="PDT") + 60*60*3
[1] "2012-07-29 14:59:00 PDT"
R> 

ああ、日付だけが必要な場合は、もちろんさらに簡単です。

R> as.Date(strptime("Date: 2012-07-29, 11:59AM PDT", "Date: %Y-%m-%d"))
[1] "2012-07-29"
R> 
于 2012-08-01T22:03:55.693 に答える
6

これに沿った何かが機能するはずです:

x <- "Date: 2012-07-29, 12:59AM PDT"
as.Date(substr(x, 7, 16), format="%Y-%m-%d")
于 2012-08-01T22:05:32.847 に答える
4

(ほぼ) いつものように、ここには複数のオプションがあります。ただし、基本的な正規表現構文 (またはその親しい友人) に慣れる必要はありません。

raw_date <- "Date: 2012-07-29, 12:59AM PDT"

代替案 1

> gsub(",", "", unlist(strsplit(raw_date, split=" "))[2])
[1] "2012-07-29"

代替案 2

> temp <- gsub(".*: (?=\\d?)", "", raw_date, perl=TRUE)
> out <- gsub("(?<=\\d),.*", "", temp, perl=TRUE)
> out
[1] "2012-07-29"

代替案 3

> require("stringr")
> str_extract(raw_date, "\\d{4}-\\d{2}-\\d{2}")
[1] "2012-07-29"
于 2012-08-01T22:10:40.433 に答える
2

後方参照を伴う正規表現は次のように機能します。

> sub("^.+([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]).+$","\\1","Date: 2012-07-29, 12:59AM PDT")
[1] "2012-07-29"

しかし、@Dirkは、それを日付として解析することが正しい方法であることは正しいです。

于 2012-08-01T22:05:46.283 に答える