从R中的大型数据集中获取字符变量

时间:2017-01-19 06:15:04

标签: r

我有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万个响应的整个数据框中提取。

2 个答案:

答案 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.POSIXctstrptime之间的差异是输出对象的class。对于as.POSIXct,它有POSIXct个类,而strptimePOSIXltPOSIXct。除了上述之外,使用任何一个都很方便。如果有人想要提取不同的作品,例如“月”,“年”等。等,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