R语言之基础数据管理(上)

1.变量重命名

>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

2.缺失值处理

在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()函数处理后的数据仅包含完整观测数据

3.日期值处理

日期值通常以字符串的形式输入到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语言学习笔记,不以盈利为目的,纯手工码字不容易,若整理的笔记中,对您有所助益,麻烦点个赞或者收藏,万分感谢!如有构成侵权的地方,请联系作者删除,谢谢合作!

你可能感兴趣的:(R语言学习,r语言,数据分析,数据结构)