>fix(object)
#打开交互式编辑器,在编辑其中修改变量名
或者通过names()函数重命名变量
>names(objecet)
#显示对象所有变量名
>names(object)[n]<-"新名称"
# n表示object中需要修改名称的变量所在的列数
>names(object)[3:5]<-c("name1","name2","name3")
# 将object中的第三道第五个变量进行重命名
或者通过plyr包中的rename()函数修改变量名
>install.packages("plyr")
#安装plyr包
>library(plyr)
#加载plyr包
>rename(dataframe,c(oldname="新名称",oldname="新名称",......))
#同时修改多个变量名
>dataframe<-rename(dataframe,c(oldname="新名称",oldname="新名称",......))
#修改完名称后重新赋给datafame
在R中缺失值会以符号NA(Not Available,不可用)表示,不完整的数据对于分析会有较多影响,可以根据需求将缺失值处理掉。
缺失值检测
>y<-c(1,2,NA,4,NA,5,6)
#创建示例向量 y
> is.na(y)
[1] FALSE FALSE TRUE FALSE TRUE FALSE FALSE
#通过is.na()函数检测缺失值,非缺失值返回FALSE,缺失值则返回TRUE
对于多行多列的数据框,还可以指定检测某几行或者某几列
> is.na(leadership[,6:10])
q1 q2 q3 q4 q5
[1,] FALSE FALSE FALSE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE FALSE
[3,] FALSE FALSE FALSE FALSE FALSE
[4,] FALSE FALSE FALSE TRUE TRUE
[5,] FALSE FALSE FALSE FALSE FALSE
#检测leadership中第6列至第10列
R 并不把无限的或者不可能出现的数值标记成缺失值。正无穷和负无穷分别用Inf和–Inf所标记,比如5/0返回Inf。不可能的值(比如说,sin(Inf))用NaN符号来标记(not a number,不是一个数)若要识别这些数值,你需要用到is.infinite()或is.nan()。
> 5/0
[1] Inf
> -5/0
[1] -Inf
缺失值剔除
> y<-c(1,2,NA,4,NA,5,6)
> is.na(y)
[1] FALSE FALSE TRUE FALSE TRUE FALSE FALSE
#检测缺失值
> sum(y)
[1] NA
#由于 y 中有缺失值,所以 sum 也为缺失值
> sum(y,na.rm=TRUE)
[1] 18
#剔除缺失值后重计算
使用na.omit()函数可以将含有缺失值的观测剔除
> leadership
manager date country gender age q1 q2 q3 q4 q5
1 1 10/24/08 US M 32 5 4 5 5 5
2 2 10/28/08 US F 40 3 5 2 5 5
3 3 10/01/08 UK F 25 3 5 5 5 2
4 4 10/12/08 UK M 39 3 3 4 NA NA
5 5 05/01/09 UK F NA 2 2 1 2 1
#含有缺失值的原数据
> newdata <- na.omit(leadership)
> newdata
manager date country gender age q1 q2 q3 q4 q5
1 1 10/24/08 US M 32 5 4 5 5 5
2 2 10/28/08 US F 40 3 5 2 5 5
3 3 10/01/08 UK F 25 3 5 5 5 2
#使用na.omit()函数处理后的数据仅包含完整观测数据
日期值通常以字符串的形式输入到R中,然后转化为以数值形式存储的日期变量。函数as.Date()用于执行这种转化。其语法为as.Date(x, “input_format”),其中x是字符型数据,input_format则给出了用于读入日期的适当格式
符 号 | 含 义 | 示 例 |
---|---|---|
%d | 数字表示的日期(0~31) | 01~31 |
%a | 缩写的星期名 | Mon |
%A | 非缩写星期名 | Monday |
%m | 月份(00~12) | 00~12 |
%b | 缩写的月份 | Jan |
%B | 非缩写月份 | January |
%y | 两位数的年份 | 07 |
%Y | 四位数的年份 | 2007 |
R语言中日期值默认输入格式为yyyy-mm-dd
> mydates <- as.Date(c("2020-06-22", "2020-07-20"))
#将默认格式的字符型数据转换为对应日期
> mydates
[1] "2020-06-22" "2020-07-20"
相反strDates则是使用mm-dd-yyyy格式读取数据
> strDates <- c("07/20/2020", "08/15/2020")
> dates <- as.Date(strDates, "%m/%d/%Y")
> dates
[1] "2020-07-20" "2020-08-15"
查看当前日期,今天是2020年7月20日
> Sys.Date()
[1] "2020-07-20"
# Sys.Date()函数只返回当前日期
> date()
[1] "Mon Jul 20 18:09:10 2020"
# date()函数则返回星期、月份、时刻、年份等信息
可以使用函数format(x, format=“output_format”)来输出指定格式的日期值,并且可以提取日期值中的某些部分:
> format(Today,format="%b %d %Y")
[1] "7月 20 2020"
# %b%d%Y需要空格隔开,月份单位好像默认自带的
> format(Today,format="%Y年%b%d日")
[1] "2020年7月20日"
# 可以在对应符号后加单位,也可以更具需要改变年月日位置
> format(Today,format="%a")
[1] "周一"
> format(Today,format="%A")
[1] "星期一"
> format(Today,format="%b")
[1] "7月"
> format(Today,format="%B")
[1] "七月"
计算时间间隔
> startdate<-as.Date("2018-06-25") #起始日期
> enddate<-as.Date("2020-07-20") #终止日期
> days<-enddate-startdate #两者相减
> days
Time difference of 756 days
也可以使用函数difftime()来计算时间间隔,并以星期、天、时、分、秒来表示。
> today<-Sys.Date()
> birthday<-as.Date("1949-10-01")
> difftime(today,birthday,units="year")
Error in match.arg(units) :
'arg'应当是“auto”, “secs”, “mins”, “hours”, “days”, “weeks”其中的一个
# 单位只能是 默认、秒、分钟、小时、天、周其中的一个
> difftime(today,birthday,units="days")
Time difference of 25860 days
#至今新中国成立25860天
同样可以将日期变量转换为字符型变量,函数as.character()可将日期值转换为字符型:
>strDates <- as.character(dates)
进行转换后,即可使用一系列字符处理函数处理数据(如取子集、替换、连接等)
特别注明:本文属于R语言学习笔记,不以盈利为目的,纯手工码字不容易,若整理的笔记中,对您有所助益,麻烦点个赞或者收藏,万分感谢!如有构成侵权的地方,请联系作者删除,谢谢合作!