如何将整数列转换为日期:
DATE PRCP
1: 19490101 25
2: 19490102 5
3: 19490118 18
4: 19490119 386
5: 19490202 38
Run Code Online (Sandbox Code Playgroud)
到这样的表:
days month years PRCP
Run Code Online (Sandbox Code Playgroud)
akr*_*run 10
我们可以用 extract
library(tidyr)
extract(df, DATE, into=c('YEAR', 'MONTH', 'DAY'),
'(.{4})(.{2})(.{2})', remove=FALSE)
# DATE YEAR MONTH DAY PRCP
#1 19490101 1949 01 01 25
#2 19490102 1949 01 02 5
#3 19490118 1949 01 18 18
#4 19490119 1949 01 19 386
#5 19490202 1949 02 02 38
Run Code Online (Sandbox Code Playgroud)
这是使用正则表达式的另一种方式:
df <- read.table(header=T, stringsAsFactors=F, text="
DATE PRCP
19490101 25
19490102 5
19490118 18
19490119 386
19490202 38")
dates <- as.character(df$DATE)
res <- t(sapply(regmatches(dates, regexec("(\\d{4})(\\d{2})(\\d{2})", dates)), "[", -1))
res <- structure(as.integer(res), .Dim=dim(res)) # make them integer values
cbind(df, setNames(as.data.frame(res), c("Y", "M", "D"))) # combine with original data frame
# DATE PRCP Y M D
# 1 19490101 25 1949 01 01
# 2 19490102 5 1949 01 02
# 3 19490118 18 1949 01 18
# 4 19490119 386 1949 01 19
# 5 19490202 38 1949 02 02
Run Code Online (Sandbox Code Playgroud)
我建议您使用 lubridate 包:
require(lubridate)
df[, DATE := ymd(DATE)]
df[, c("Day", "Month", "Year") := list(day(DATE), month(DATE), year(DATE))]
df[, DATE := NULL]
Run Code Online (Sandbox Code Playgroud)
另一种选择是separate从tidyr包中使用:
library(tidyr)
separate(df, DATE, c('year','month','day'), sep = c(4,6), remove = FALSE)
Run Code Online (Sandbox Code Playgroud)
这导致:
DATE year month day PRCP
1: 19490101 1949 01 01 25
2: 19490102 1949 01 02 5
3: 19490118 1949 01 18 18
4: 19490119 1949 01 19 386
5: 19490202 1949 02 02 38
Run Code Online (Sandbox Code Playgroud)
基础 R 中的两个选项:
1)与substr作为所述通过在注释中@coffeinjunky:
df$year <- substr(df$DATE,1,4)
df$month <- substr(df$DATE,5,6)
df$day <- substr(df$DATE,7,8)
Run Code Online (Sandbox Code Playgroud)
2)用as.Date和format:
df$DATE <- as.Date(as.character(df$DATE),'%Y%m%d')
df$year <- format(df$DATE, '%Y')
df$month <- format(df$DATE, '%m')
df$day <- format(df$DATE, '%d')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |