[英]Extracting year from unformatted date character vector
我有一個字符向量,它以無格式的日期表示覆蓋的年份,如下所示:
Period of coverage
1 1/1/2011 to 31/12/2011
2 1/1/2010 to 31/12/2010
3 1/1/2012 to 31/12/2012
4 1/1/2010 to 31/12/2010
5 1/1/2011 to 31/12/2011
6 1/1/2012 to 31/12/2012
7 1/1/2010 to 31/12/2010
8 1/1/2010 to 31/12/2010
9 1/1/2009 to 31/12/2009
我想知道如何將這些列轉換成每個觀測值代表的年份。 每行都有相同的開始日期和結束日期(1/1和31/12)。
假設您的數據存儲在可變period
並且所有日期的格式都保持不變,如您所說,
yr = substr(period, 19, 22)
假設DF
在末尾的注釋中可重復顯示,請刪除所有內容,直到最后一個斜杠並轉換為數字:
transform(DF, year = as.numeric(sub(".*/", "", `Period of coverage`)), check.names = FALSE)
贈送:
Period of coverage year
1 1/1/2011 to 31/12/2011 2011
2 1/1/2010 to 31/12/2010 2010
3 1/1/2012 to 31/12/2012 2012
4 1/1/2010 to 31/12/2010 2010
5 1/1/2011 to 31/12/2011 2011
6 1/1/2012 to 31/12/2012 2012
7 1/1/2010 to 31/12/2010 2010
8 1/1/2010 to 31/12/2010 2010
9 1/1/2009 to 31/12/2009 2009
另一種可能性是首先將其轉換為Date類,注意as.Date
忽略垃圾:
to_year <- function(x, fmt) as.numeric(format(as.Date(x, fmt), "%Y"))
transform(DF, year = to_year(`Period of coverage`, "%d/%m/%Y"), check.names = FALSE)
Lines <- " Period of coverage
1/1/2011 to 31/12/2011
1/1/2010 to 31/12/2010
1/1/2012 to 31/12/2012
1/1/2010 to 31/12/2010
1/1/2011 to 31/12/2011
1/1/2012 to 31/12/2012
1/1/2010 to 31/12/2010
1/1/2010 to 31/12/2010
1/1/2009 to 31/12/2009"
DF <- read.csv(text = Lines, check.names = FALSE, as.is = TRUE)
如果您的字符串始終具有相同的格式,則只需使用子字符串並將其轉換為日期即可:
as.Date(substr("1/1/2011 to 31/12/2011",5,8), format="%Y")
as.Date(substr("1/1/2011 to 31/12/2011",19,23), format="%Y")
如果字符串的可變性更大,但始終用“ to”分隔,則可以使用stringsplit取消列出字符串,然后將其格式化為年份:
a <- "1/1/2011 to 31/12/2011"
a2 <- strsplit(a, "to") ;
a3 <- unlist(a2) ;
a4 <- as.Date(a3, format="%d/%m/%Y")
year = format(a4, format="%Y")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.