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[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[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<-as.Date(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),]
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容