R语言实战第四章

4.1创建leadership数据框

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)

Q:stringsAsFactors什么意思?

4.2创建新变量

变量名<-表达式
mydata<-data.frame(x1=c(2,2,6,8),x2=c(3,4,2,8))
mydata$sumx<-mydata$x1+mydata$x2
mydata$means<-(mydata$x1+mydata$x2)/2

attach(mydata)
mydata$sumx<-x1+x2
mydata$means<-(x1+x2)/2
detach(mydata)

推荐!!

mydata<-transform(mydata,
                  sumx=x1+x2, meanx=(x1+x2)/2)

4.3变量重编码

leadershipage==99]<-NA #99岁年龄值重编码为缺失值

连续型年龄变量重编码为类别型变量
leadership$agecat[leadership$age>75]<-"Elder"
leadership$agecat[leadership$age>=55&leadership$age<=75]<-"Middle Aged"
leadership$agecat[leadership$age<55]<-"young"
紧凑的写法
leadership<-within(leadership,{agecat<-NA
                   agecat[age>75]<-"Elder"
                   agecat[age>=55&age<=75]<-"Middle Aged"
                   agecat[age<55]<-"Young"})
within与with类似,within允许修改数据框,先创建agecat变量,设置为NA,再赋值为类别型变量

4.4变量的重命名

方法1
fix(leadership)
方法2
names(leadership)[2]<-"testData"
names(leadership)[6:10]<-c("item1","item2","item3","item4","item5")
方法3
调用plyr包中的rename()函数,修改变量名
rename(dataframe,c(oldname="newname",.....))

4.5缺失值

检验缺失值是否存在 is.na()

y<-c(1,2,3,NA)
is.na(y)
返回情况 FALSE FALSE FALSE TRUE

数据值处理步骤

1、重编码某些值为缺失值
leadershipage==99]<-NA
2、在分析中排除缺失值
含有缺失值的算术表达式和函数的计算结果也是缺失值

x<-c(1,2,NA,3)
y<-x[1]+x[2]+x[3]+x[4]
z<-sum(x)
改正,使用na.rm=TRUE移除缺失值
x<-c(1,2,NA,3)
y<-sum(x,na.rm = TRUE)

函数na.omit()移除含有缺失值的行,适用于只有少数缺失值或者仅集中于一小部分观测中
newdata<-na.omit(leadership)

4.6日期值

日期值通常以字符串的形式输入,然后转化为以数值形式存储的日期变量。通过as.Date()函数进行转化
as.Date(x,"input_format") #x是字符型数据,input给出了用于读入日期的适当格式
日期的默认输入格式yyy-mm-dd
mydates<-as.Date(c("2007-06-22","2004-02-13"))

使用yyy-mm-dd的格式读取数据

strDates<-c("01/01/1965","08/16/1975")
dates<-as.Date(strDates,"%m/%d/%Y")

将leadership中的字符串转变为日期变量

myformat<-"%m/%d/%y"
leadershipdate,myformat)

输出日期

Sys.Date()返回当天的日期,date()返回当前的日期和时间
函数format(x,format="output_format")输出指定格式的日期值,并且可以提取日期值的某些部分
today<-Sys.Date()
format(today,format="%B %d %Y")

日期计算

startdate<-as.Date("2004-02-13")
enddate<-as.Date("2011-01-22")
days<-enddate-startdate
days

计算时间间隔

today<-Sys.Date()
dob<-as.Date("1956-10-12")
difftime(today,dob,units="hours")

将日期变量转换为字符型变量,转换后,可以进一步使用一系列字符处理函数处理数据

strDates<-as.character(dates)

4.7类型转换

判断 is.datatype() 转换 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)
查看数据类型

mode(a)

数据类型小结
1、从存储方式划分数据类型
(1)数值型(numeric)
可以是整数、小数、科学计数的方式
(2)字符型(character)
以双引号或单引号夹起来的数据
(3)逻辑型(logical)
只有TRUE和FALSE两种值
(4)复数型(complex)
例如a+b形式
(5)raw数据
二进制形式保存的数据
(6)缺失值(missing value)
NA或者NULL
2、从结构角度划分数据类型
(1)向量(vector)
有相同基本类型元素组成的序列,类似一维数组,可存储数值型、字符型或者逻辑型数据
a<-c(1,2,3)
b<-c("1","2","3")
c<-c(TRUE,FALSE)
(2)矩阵(matrix)
将数据用行和列排列的长方形二维数据,其单元必须是相同的数据类型>
建立一个54的矩阵
y<-matrix(1:20,nrow = 5,ncol = 4)
y
建立一个按行填充2
2的矩阵,行名R1,R2;列名C1,C2
cells<-c(1,2,3,4)
rnames<-c("R1","R2")
cnames<-c("C1","C2")
mymatrix<-matrix(cells,nrow=2,ncol=2,byrow =TRUE,dimnames=list(rnames,cnames))
(3)数组(array)
与矩阵类似,但是维度可大于2
创建一个三维(234)的数值型数据
dim1<-c("A1","A2")
dim2<-c("B1","B2","B3")
dim3<-c("C1","C2","C3","C4")
z<-array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
z
其中c(2,3,4)给出了各维度下标的最大值
(4)因子(factor)
将数据分成不同的水平或者因子,如性别中有男和女两个因子。
因子有名义型变量(无顺序之分,如糖尿病类型)、有序型变量(变量间有一种顺序关系,如病情好坏)、
连续型变量(呈现某个范围内的任意值,并同时表示顺序和数量,如年龄)
patientID<-c(1,2,3,4)
age<-c(25,34,28,52)
diabetes<-c("Type1","Type2","Type1","Type1")
status<-c("poor","Improved","Excellent","poor")
diabetes<-factor(diabetes)
status<-factor(status,ordered = TRUE)
patientdata<-data.frame(patientID,age,diabetes,status)
str(patientdata)
summary(patientdata)
(5)列表(list)
向量、矩阵和数组的元素必须是同一类型的数据,如果一个数据对象需要含有不同的数据类型,可采用列表
创建一个列表
g<-"My First List"
h<-c(25,26,18,39)
j<-matrix(1:10,nrow=5)
k<-c("one","two","three")
mylist<-list(title=g,ages=h,j,k)
mylist
(6)数据框(data frame)

4.8数据排序

语句newdata<-leadership[order(leadership$age),]
创建新数据集,按照经理的年龄升序(默认)排序,降序-age

attach(leadership)
newdata<-leadership[order(gender,-age),]
detach(leadership)

4.9数据集的合并

向数据框添加列(横向合并)

total<-merge(dataframeA,dataframeB,by="ID")
total<-cbind(A,B)#横向合并两个矩阵或数据框

向数据框添加行(纵向合并)

total<-rbind(dataframeA,dataframeB)
#两个数据框必须有相同的变量,顺序不一定相同,如果有多余的变量需要删除或者设为NA

4.10数据集取子集

4.10.1选入(保留)变量

myvars<-paste("q",1:5,sep="")
newdata<-leadership[myvars]

4.10.2剔除(丢弃)变量

myvars<-names(leadership)%in%c("q3","q4")
newdata<-leadership[!myvars]
newdata<-leadership[c(-8,-9)]

4.10.3选入观测

newdata<-leadership[1:3,]#选择前三行观测
newdata<-leadership[leadership$gender=="M"&leadership$age>30,]#选择所有30岁以上的男性

另一种写法

attach(leadership)
newdata<-leadership[gender=='M'&age>30,]
detach(leadership)

4.10.4subset函数

newdata<-subset(leadership,age>25&gender=='M',select = gender:q4)

4.10.5随机抽样

mysample<-leadership[sample(1:nrow(leadership),4,replace=FALSE),]

你可能感兴趣的:(R语言实战第四章)