参考资料:R语言实战【第2版】
1、日期值
日期值通常以字符串的形式输入R中,然后转化为数值形式存储的日期边阿玲。函数as.Date()用于执行这种转化。其语法为as.Date(x,"input_format"),其中x是字符型数据,input_format则给出了用于读入日期的适当格式,见下表
符号 | 含义 | 示例 |
%d | 两位数字表示的日期 | 01~31 |
%a | 缩写的星期名 | Mon |
%A | 全称的星期名 | Monday |
%m | 两位数表示的月份 | 00~12 |
%b | 缩写的月份 | Jan |
%B | 全称的月份 | January |
%y | 两位数表示的年份 | 24 |
%Y | 4位数表示的年份 | 2024 |
as.Date()函数默认的输入格式为yyyy-mm-dd。
# as.Date()的默认输入格式为"yyyy-mm-dd"
mydates<-as.Date(c('2007-06-22','2004-02-13'))
mydates
# 读取“mm/dd/yyyy”格式的数据
strDates<-c('01/05/1965','08/16/1975')
dates<-as.Date(strDates,"%m/%d/%Y")
dates
# 将leadership数据集中的字符型日期转为日期
myformat<-"%m/%d/%y"
leadership$testDate<-as.Date(leadership$testDate,myformat)
leadership$testDate
有两个函数对于处理时间戳数据特别实用:Sys.Date()可以返回当天的日期,而date()则返回前的日期和时间。
我们可以使用函数format(x,format="output_format")来输出指定格式的日期值,并且可以提取日期值中的某些部分:
today<-Sys.Date()
format(today,format="%B %d %Y")
format(today,format="%A")
R的内部存储日期是使用自1970年1月1日以来的天数表示的,更早的日期则表示为负数。这意味着可以在日期值上执行算术运算。
startdate<-as.Date("2004-02-13")
enddate<-as.Date("2011-01-22")
days<-enddate-startdate
days
我们也可以使用函数difftime()来计算时间间隔,并以星期、天、时、分、秒来表示。
today<-Sys.Date()
dob<-as.Date("1990-01-13")
difftime(today,dob,units='weeks')
日期变量也可以转换为字符型变量,使用函数as.Charactet()可将日期值转换为字符型,进行转换后,即可使用一系列字符处理函数处理数据(如取子集,替换,连接等)
2、类型转换
判断 | 转换 |
is.numeric() | as.numeric() |
is.character() | as.character() |
is.vector() | as.vector() |
is.matrix() | as.matrix() |
is.data.frame() | as.data.frame() |
is.factor() | as.factor() |
is.logical() | as.logical() |
名为is.datatype()这样的函数返回TRUE或FALSE,而as.datatype()这样的函数则将其转换为对应的类型。
a<-c(1,2,3)
a
is.numeric(a)
is.vector(a)
a<-as.character(a)
a
is.numeric(a)
is.vector(a)
is.character(a)
3、数据排序
在R中,可以使用order()函数对一个数据框进行排序。默认的排序顺序是升序。在排序变量的前面加一个减号即可得到降序的排序结果。
manager<-c(1,2,3,4,5)
date<-c('10/24/08','10/28/08','10/1/08','10/12/08','5/1/09')
country<-c('US','US','UK','UK','UK')
gender<-c('M','F','F','M','F')
age<-c(32,45,25,39,99)
q1<-c(5,3,3,3,2)
q2<-c(4,5,5,3,2)
q3<-c(5,2,5,4,1)
q4<-c(5,5,5,NA,2)
q5<-c(5,5,2,NA,1)
leadership<-data.frame(manager,date,country,gender,age,
q1,q2,q3,q4,q5,stringsAsFactors = FALSE)
newdata<-leadership[order(leadership$age),]
newdata
# 按照性别和年龄升序排列
attach(leadership)
newdata<-leadership[order(gender,age),]
detach(leadership)
newdata
# 按性别升序和年龄降序排列
attach(leadership)
newdata<-leadership[order(gender,-age),]
detach(leadership)
newdata