1、一个简单的示例
#通过国内镜像下载,加快速度
options(repos=structure(c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")))
#4.1一个示例
manager <- c(1,2,3,4,5)
date <- c("10/24/08","10/28/08","10/1/08","10/12/08","5/1/09")
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,gender,
q1,q2,q3,q4,q5)#形成数据框
2、创建新变量
#操作数据表
#4.2生成新变量
#方法一
leadership$q6=leadership$q4+leadership$q5
#方法二
leadership<-transform(leadership,q7=q4+q5)
3、变量重编码
#4.3变量重编码(进行分类)
#leadership$age[leadership$age==99]<-NA,leadership$age==99为条件
leadership$age[leadership$age==99]<-NA
leadership$agecat[leadership$age>50]<-"elder"
leadership$agecat[leadership$age>=40&leadership$age<=50]<-"middle aged"
leadership$agecat[leadership$age<40]<-"YOUNG"
#简便写法
attach(leadership)
leadership$age[age==99]='none'
leadership$agecat1[age>50]<-'o'
leadership$agecat1[age>40&age<50]<-'m'
leadership$agecat1[age<40]<-'y'
detach(leadership)
#另一种写法
leadership1<-within(leadership,{
age[age==99]<-NA
agecat[age>50]<-'e'
agecat[age>40&age<50]<-'m'
agecat[age<40]<-'y'
})
4、变量重命名
#4.4变量重命名
#方法一
fix(leadership)#直接启动了窗口,进行修改
#方法二
names(leadership)[1]<-"manager"
#方法三
install.packages("plyr")
library(plyr)
leadership<-rename(leadership,c(manager="id",q5="qq5"))
5、缺失值
#4.5缺失值
#(1)识别缺失值的函数is.na()
y<-c(1,2,3,NA)
is.na(y)#判断是否缺失
#(2)重编码某些值为缺失值
leadership$age[leadership$age==99]<-NA
#(3)缺失值参与计算怎么样
y
z<-y[1]+y[2]+y[3]+y[4]#只要存在缺失值,它们的和就是NA
Z
Z<-sum(y,na.rm = TRUE)#若含有na就将其remove掉
Z
#(4)移除含有缺失值的观测(行)
newdata<-na.omit(leadership)
6、日期值
#4.6日期值#计算账龄
#(1)日期值的读入
mydata<-c("2007-06-22","2017-9-30")
mydata1<-as.Date(c("2007-06-22","2017-9-30"))#日期型可以计算
mydata
mydata1
#(2)日期值的格式(输入的格式)
strDates<-c("01/05/1965","08/16/1975")
mydata2<-as.Date(strDates,"%m/%d/%Y")#75就是%y,1975就是%Y
#(3)系统日期与当前日期
Sys.Date()
date()
#(4)日期值的输出格式
today<-Sys.Date()
format(today,format="%B %d %Y")
#(5)日期值的间隔计算
startdate<-as.Date("1998-7-23")
enddate<-as.Date("2022-2-15")
days<-enddate-startdate#计算过了多少天
days
weeks<-difftime(enddate,startdate,units = "weeks")#按周计算日期
weeks
7、类型转换
#4.7类型转换
#(1)is.xxx()函数,用来判断类型
a<-c(1,2,3)
class(a)#数据类型
is.numeric(a)#判断是不是数值型
is.character(a)
#(2)as.xxx()函数转换成某一类型的数据
as.character(a)
is.numeric(a)#判断是不是数值型
is.character(a)
8、数据排序
#4.8数据排序,先对性别进行排序,再在性别中对年龄进行排序
leadership1<-leadership[order(leadership$gender,leadership$age),]#按年龄进行排序,记住逗号一定不可以漏掉
9、表的合并
#4.9表的合并
leader_a<-data.frame(manager,country,gender,age)
leader_b<-data.frame(manager,q1,q2,q3)
leader_b<-leader_b[order(-leader_b$manager),]#降序排列
#根据主键进行连接(默认主键唯一)
leadership2<-merge(leader_a,leader_b,by="manager")
#直接横向拼接
leadership3<- cbind(leader_a,leader_b)
10、数据集取子集
(1)保留数据
#4.10数据集取子集
#(1)保留变量
#方法一:按照行或者列保留
newdata<-leadership[,c(5:9)]#保留5~9列
#方法二:按照行名进行保留
#先生成字符串向量
myvars<-c("gender","country","q5")
newdata1<-leadership[myvars]
#方法三:按照行名进行保留
myvars<-paste("q",1:5,sep="")
myvars
newdata2<-leadership[myvars]
(2)删除变量
#(2)删除变量
#方法一
newdata<-newdata[c(-4,-5)]
#方法二
newdata$q3=NULL#删除该行
newdata$q2=NA#使得为空
(3)选择数据
#(3)选入观测(保留行)
leadership[1:3,]#行的1到3
leadership[leadership$gender=="M"&leadership$age>30,]
#(4)既保留行又保留列
newdata3<-subset(leadership,
gender=="M" & age>25,
select = c("manager","gender","age"))
11、使用sql语句
#4.11使用sql语句来操作数据集
options(repos=structure(c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")))
install.packages("sqldf")
library(sqldf)
a<-mtcars
View(a)
newdf<-sqldf("select*from mtcars where carb=1 order by mpg",row.names=TRUE)