我有165个变量的大型数据集(1700万受访者)。我有一个日期变量,格式如下:
9/16/2009 12:35:00 PM
9/16/2009 12:54:43 PM
9/16/2009 1:35:00 PM
...
我正在努力提取这一年。 我尝试过splitstr,但似乎无法将新的矩阵或数据框拆分成列。任何帮助表示赞赏!
这是其他提取日期问题的独特之处,因为我需要从1700万个响应的整个数据框中提取。
答案 0 :(得分:1)
如果我们需要separate
日期',tidyr
使用split
会很方便。和'时间'
library(tidyr)
df2 %>%
separate(DateTime, into = c("Date", "Time"), sep=" ")
如果我们需要提取年份,请使用gsub
df2$Year <- gsub(".*/|\\s+.*", "", df2$DateTime)
或as.POSIXct
,因为它是&#39; DateTime&#39;
df2$Year <- format(as.POSIXct(df2$DateTime, format = "%m/%d/%Y %H:%M:%S"), "%Y")
或者@Jaap在评论中建议
strptime(df2$DateTime, format = '%m/%d/%Y %I:%M:%S %p')$year + 1900
as.POSIXct
和strptime
之间的差异是输出对象的class
。对于as.POSIXct
,它有POSIXct
个类,而strptime
是POSIXlt
和POSIXct
。除了上述之外,使用任何一个都很方便。如果有人想要提取不同的作品,例如“月”,“年”等。等,strptime
更方便。使用as.POSIXct
,我们可以将format
包裹起来以提取“#month”,“#year;&#39; year”。另请注意,strptime
类在使用dplyr
函数
或使用lubridate
library(lubridate)
df2$Year <- year(mdy_hms(df2$DateTime))
注意:最好使用日期时间函数进行提取而不是使用字符串操作
答案 1 :(得分:0)
如果您想提取年份,可以试试这个:
df <- read.csv(text='Date
9/16/2009 12:35:00 PM
9/16/2009 12:54:43 PM
9/16/2009 1:35:00 PM ')
df$year <- as.numeric(substring(as.character(df$Date), 6,9))
df$year
#[1] 2009 2009 2009