我的数据集中有一个整数列,它有四位数的年份值,如:
2001 2002 2002 2002 2003 2005
Run Code Online (Sandbox Code Playgroud)
我试图将四位数年份值转换为日期类型.
我正在使用的代码是:
year <- as.Date(as.character(data_file$evtYear), format = "%Y")
Run Code Online (Sandbox Code Playgroud)
但输出是:
"2001-05-15" "2002-05-15" "2002-05-15" "2002-05-15" "2003-05-15" "2005-05-15"
Run Code Online (Sandbox Code Playgroud)
这给出了错误的输出.它在一个日期(2001年和15年)给出了两年的价值.
我只想将我的四位数年份从原始数据转换为Date类型中的'Year'.预期的出局很简单:
2001 2002 2002 2002 2003 2005
Run Code Online (Sandbox Code Playgroud)
但是他们的类应该是Date类型.
如何在R中实现这一目标?
G. *_*eck 19
根据评论,结果发现提问的人不需要将数字年改为"Date"课程; 然而,问题是如何做到这一点,所以这里是一个答案.
以下是"Date"从4位数字年份创建类对象的几种方法.全部用途as.Date:
yrs <- c(2001, 2002, 2002, 2002, 2003, 2005)
Run Code Online (Sandbox Code Playgroud)
1)ISO日期
as.Date(ISOdate(yrs, 1, 1)) # beginning of year
as.Date(ISOdate(yrs, 12, 31)) # end of year
Run Code Online (Sandbox Code Playgroud)
这个ISOdate解决方案有点棘手,因为它创建了一个中间POSIXct对象,因此可能存在时区问题.您可能更喜欢以下之一.
2)粘贴
as.Date(paste(yrs, 1, 1, sep = "-")) # beginning of year
as.Date(paste(yrs, 12, 31, sep = "-")) # end of year
Run Code Online (Sandbox Code Playgroud)
3)zoo :: as.yearmon
library(zoo)
as.Date(as.yearmon(yrs)) # beginning of year
as.Date(as.yearmon(yrs) + 11/12, frac = 1) # end of year
Run Code Online (Sandbox Code Playgroud)
注意: 如果y是上述任何一项的结果,则format(y, "%Y")给出字符年份并as.numeric(format(y, "%Y"))给出数字年份.
Uwe*_*Uwe 11
正如OP已经认识到的那样,单独一年并不构成有效日期,因为未指定月份和日期.
然而,一些日期和日期时间转换功能,例如ymd(),parse_date_time()在lubridate包装识别参数truncated允许不完整的日期的解析:
yrs <- c(2001, 2002, 2002, 2002, 2003, 2005)
lubridate::ymd(yrs, truncated = 2L)
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)[1] "2001-01-01" "2002-01-01" "2002-01-01" "2002-01-01" "2003-01-01" "2005-01-01"
这些年份已于1月1日完成,以确定有效日期.结果是上课Date.
小智 7
你可以做:
library(lubridate)
yrs <- c(2001, 2002, 2002, 2002, 2003, 2005)
yr <- as.Date(as.character(yrs), format = "%Y")
y <- year(yr)
Run Code Online (Sandbox Code Playgroud)
输出:
2001 2002 2002 2002 2003 2005
Run Code Online (Sandbox Code Playgroud)
润滑的答案:
library(lubridate)
year <- ymd(sprintf("%d-01-01",data_file$evtYear))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17517 次 |
| 最近记录: |