r - 如何提取 10 个字符数的前 6 位数字并将其转换为 as.Date?
问题描述
假设我有 10 位数字代表存储的社会安全号码(在这个例子中显然是假的)as.character()
。
df <- data.frame(number = as.character(c("1208891384", "2105650124", "0102018213")))
> df
number
1 1208891384
2 2105650124
3 0102018213
社保号代表ddmmyy-xxxx
。我想ddmmyy
从字符串中提取这些并创建一个包含 6 个数字的新协变量as.Date()
。
我希望有一个解决方案dplyr
预期产出
> df
number date
1 1208891384 1989-08-12
2 2105650124 1965-05-21
3 0102018213 2001-02-01
和
str(df)
'data.frame': 6 obs. of 2 variable:
$ number: chr "1208891384" "2105650124" "0102018213"
$ date : Date, format: 1989-08-12 1965-05-21 ...
更新
在我的数据上尝试了以下方法。然后收到一个错误。
pp <- structure(list(cpr = c("0311611951", "1902521268", "1209470762"
)), row.names = c(NA, -3L), class = "data.frame")
和
pp %>% mutate(b_day=substr(cpr,1,2),
month=substr(cpr,3,4),
year=as.numeric(substr(cpr,5,6)),
date=as.Date(substr(cpr,1,6),'%d%m%y'),
yearcheck=as.numeric(format(date,'%Y')),
year2=ifelse(yearcheck>format(Sys.Date(),'%Y'),yearcheck-100,yearcheck),
Date=as.Date(paste0(as.character(year2),month,day),'%Y%m%d'))
给
mutate()
输入问题Date
。x 无法将类型“闭包”强制转换为“字符”类型的向量 ℹ 输入Date
为as.Date(paste0(as.character(year2), month, day), "%Y%m%d")
. 运行rlang::last_error()
以查看错误发生的位置。
解决方案
尝试这个。注意年份,因为 1970 年之前的某些日期R
无法正确转换。这里的代码:
library(dplyr)
#Data
df <- data.frame(number = as.character(c("1208891384", "2105650124", "0102018213")))
#Code
df <- df %>% mutate(day=substr(number,1,2),
month=substr(number,3,4),
year=as.numeric(substr(number,5,6)),
date=as.Date(substr(number,1,6),'%d%m%y'),
yearcheck=as.numeric(format(date,'%Y')),
year2=ifelse(yearcheck>as.numeric(format(Sys.Date(),'%Y')),yearcheck-100,yearcheck),
Date=as.Date(paste0(as.character(year2),month,day),'%Y%m%d')) %>%
select(c(number,Date))
输出:
number Date
1 1208891384 1989-08-12
2 2105650124 1965-05-21
3 0102018213 2001-02-01
推荐阅读
- django - 在 Django 中,如何从另一个模板引用一个模板?
- javascript - 将 JQuery 放在 React 组件中的什么位置?
- autohotkey - 是否可以使用两个键,一个在 AutoHotKey (AHK) 脚本中执行一个功能
- javascript - django ajax 请求获取选定的索引
- angular - 构建后运行命令/脚本
- bash - 在 Bash 中为文件名动态添加日期
- saml - SAMLv2 - IssueInstant 的处理规则?
- css - 在伪元素上转换转换会导致元素在 Safari 中抖动
- visual-studio-code - VSCode 扩展:如何在输出通道中渲染彩色输出?
- python - 如何迭代defaultdict?