从日期开始提取年份

hbt*_*046 59 r date

如何从变量中删除第一个元素,尤其是当此变量具有特殊字符时.例如,我有以下专栏:

Date
01/01/2009
01/01/2010
01/01/2011
01/01/2012
Run Code Online (Sandbox Code Playgroud)

我需要有一个如下所示的新列:

Date
2009
2010
2011
2012
Run Code Online (Sandbox Code Playgroud)

RHe*_*tel 137

正如评论中所讨论的,这可以通过将条目转换为Date格式并提取年份来实现,例如:

format(as.Date(df1$Date, format="%d/%m/%Y"),"%Y")
Run Code Online (Sandbox Code Playgroud)

  • 来自`?format`:"格式是**通用函数**.除了这里描述的方法,还有日期方法(**参见format.Date**)".来自`?format.Date`:"## S3方法用于类'Date'格式(x,...)[where ...表示]要从其他方法传递的其他参数,**包括as的格式.character和as.Date**方法." 另请参阅`?format.Date`中的第一个示例. (8认同)
  • 为什么这会起作用?如果我查看`format()`的文档,就没有提到你提供的第二个参数.我该怎么理解这个? (4认同)

Ale*_*der 15

如果所有日期都是相同的宽度,则可以将日期放在向量中并使用子字符串

Date
a <- c("01/01/2009", "01/01/2010" , "01/01/2011")
substring(a,7,10) #This takes string and only keeps the characters beginning in position 7 to position 10
Run Code Online (Sandbox Code Playgroud)

产量

[1] "2009" "2010" "2011"
Run Code Online (Sandbox Code Playgroud)

  • 将日期视为字符串不是一个好习惯 (19认同)
  • 日期不应转换为字符串或数字;它们本质上是“自固定时间点以来的 x(秒)数”并显示为人类可读的字符串 - 严格来说不能作为字符串进行操作。 (5认同)

inv*_*tus 11

当您将变量转换为Date:

date <-  as.Date('10/30/2018','%m/%d/%Y')
Run Code Online (Sandbox Code Playgroud)

然后,您可以切出所需的元素并创建新变量,例如year:

year <- as.numeric(format(date,'%Y'))
Run Code Online (Sandbox Code Playgroud)

或月份:

month <- as.numeric(format(date,'%m'))
Run Code Online (Sandbox Code Playgroud)