先介绍一下《R语言实战》中关于时间型数据的处理。
时间型数据通常以字符串的形式输入到R中,然后转化为以数值形式存储的时间型变量,as.Date(x,"input_format")。input_format是读取时间型数据的格式:
%d 表示日期(0-31)
%a 缩写的星期名(如Mon)
%A 完整的星期名(如Monday)
%m 月份(01-12)
%b 缩写的月份(Jan)
%B 完整的月份(January)
%y 两位数的年份(如12)
%Y 四位数的年份(如2012)
date
进入今天的主题。我在做项目中通常会在R中将xlsx数据转换为csv数据,因为R读取excel数据太慢且容易出错。但是呢,今天遇到的时间型数据很不规范,有文本型的如2012-12-10,有日期型的如2013/12/11。将xlsx转换为csv中,文本型的还是2012-12-10这种形式,日期型的就变成40678这种形式(这是距离1899年12月30日的天数),class一下这两种形式的数据,都是character字符型jian。而我需要提取时间型数据的年,季度,需要的是2012-12-10这种形式,数据形式的不统一就很难处理。
我的总数据量是3万多条,解决思路是:利用grepl函数提取2012-12-30这种形式数据所在的行数作为part1,40678这种形式及NA数据所在行作为part2,part1和part2分别处理,再rbind为一个数据集。
####处理用药时间
##data_raw$用药结束日期
a
part1
part2
##格式正确part1
part1$用药结束日期
part1$year
part1$qtr
part1$year_q
##格式需处理的part2
a
b
part2$用药结束日期
part2$year
part2$qtr
part2$year_q
data_raw
write.csv(data_raw,"合并数据.csv")
领取专属 10元无门槛券
私享最新 技术干货