如何从变量中删除第一个元素,尤其是当此变量具有特殊字符时。例如,我有以下专栏:
Date
01/01/2009
01/01/2010
01/01/2011
01/01/2012
我需要一个新的列,如下所示:
Date
2009
2010
2011
2012
答案 0 :(得分:116)
正如评论中所讨论的,这可以通过将条目转换为Date
格式并提取年份来实现,例如:
format(as.Date(df1$Date, format="%d/%m/%Y"),"%Y")
答案 1 :(得分:39)
library(lubridate)
a=mdy(b)
year(a)
https://cran.r-project.org/web/packages/lubridate/vignettes/lubridate.html http://vita.had.co.nz/papers/lubridate.pdf
答案 2 :(得分:13)
如果所有日期都是相同的宽度,则可以将日期放在向量中并使用子字符串
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
输出
[1] "2009" "2010" "2011"
答案 3 :(得分:5)
将变量转换为Date
时:
date <- as.Date('10/30/2018','%m/%d/%Y')
然后您可以切出所需的元素并创建新变量,例如year:
year <- as.numeric(format(date,'%Y'))
或月份:
month <- as.numeric(format(date,'%m'))
答案 4 :(得分:1)
这是比特定答案更多的建议,但我的建议是立即将日期转换为日期变量,而不是将其保留为字符串。这样,您可以在其上使用日期(和时间)函数,而不必尝试使用非常麻烦的解决方法。
如前所述,lubridate软件包具有良好的提取功能。
对于某些项目,我发现从一开始就进行拼写会有所帮助: 创建年,月,日(月)和日(周)变量开始。 这可以简化摘要,表格和图形,因为提取代码与摘要/表格/图形代码是分开的,并且因为如果需要更改它,则不必在多个位置进行这些更改。
答案 5 :(得分:1)
如果您使用的是date
package,则可以轻松完成。
library(date)
Date <- c("01/01/2009", "01/01/2010", "01/01/2011", "01/01/2012")
Date <- as.date(Date)
Date
# [1] 1Jan2009 1Jan2010 1Jan2011 1Jan2012
date.mdy(Date)$year
# [1] 2009 2010 2011 2012
## be aware that these are now integers and thus different methods may be invoked:
str(date.mdy(Date)$year)
# int [1:4] 2009 2010 2011 2012
summary(Date)
# First Last
# "1Jan2009" "1Jan2012"
summary(date.mdy(Date)$year)
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 2009 2010 2010 2010 2011 2012
答案 6 :(得分:0)
在一段时间内,您还只能依靠data.table
包及其IDate
类以及相关功能(检查?as.IDate()
)。因此,无需额外安装lubridate
。
require(data.table)
a <- c("01/01/2009", "01/01/2010" , "01/01/2011")
year(as.IDate(a, '%d/%m/%Y')) # all data.table functions
答案 7 :(得分:-2)
首先使用
将其转换为日期格式library(lubridate)
date<-c("01/01/2009","01/01/2010", "01/01/2011"," 01/01/2012")
year(as.Date(date,"%d/%m/%Y")) #it will give you only years
希望对你有所帮助! :)