R语言学习(三)基本数据管理
2019-01-21 本文已影响25人
邱俊辉
这里举一个例子来引出基本数据管理的操作
首先先创建一个数据框
> manager<-c(1,2,3,4,5)
> date<-c("10/24/08","10/28/14","10/01/14","10/12/14","05/01/14")
> 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)
> 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/14 US F 45 3 5 2 5 5
3 3 10/01/14 UK F 25 3 5 5 5 2
4 4 10/12/14 UK M 39 3 3 4 NA NA
5 5 05/01/14 UK F 99 2 2 1 2 1
需要解决的问题如下:
1.五个评分(q1:q5)需要组合起来给出平均得分
2.数据中缺失值(NA)的处理
3.怎么提取出感兴趣的变量的数据集
4.如何研究得分与年龄之间的关系
5.如何选择特定的时间进行研究
创建新变量
在研究中需要创建新变量或者对现有的变量进行变换
变量名<-表达式
例如将上述数据框中q1到q5求和
> sum<-leadership$q1+leadership$q2+leadership$q3+leadership$q4+leadership$q5
> sum
[1] 24 20 20 NA 8
这样就得到了q1到q5的和,其中NA为缺失值
下一步将sum变量添加到数据框中,建议使用transform()函数
它可以为原有的数据框增加新列、改变原列的值,通过复制NULL来删除原有的列
> leadership1<-transform(leadership,sum=q1+q2+q3+q4+q5)
> leadership1
manager date country gender age q1 q2 q3 q4 q5 sum
1 1 10/24/08 US M 32 5 4 5 5 5 24
2 2 10/28/14 US F 45 3 5 2 5 5 20
3 3 10/01/14 UK F 25 3 5 5 5 2 20
4 4 10/12/14 UK M 39 3 3 4 NA NA NA
5 5 05/01/14 UK F 99 2 2 1 2 1 8
变量的重编码
重编码涉及根据同一个变量和/或其他变量现有值创建新值的过程
要重编码数据,可以使用R中一个或多个逻辑运算符,逻辑运算表达式可返回TRUE或FALSE
比如说要把上述数据框中大于75岁的连续型age变量重编码为类别型变量Elder,大于55小于75的为Middle Aged,小于55的为Young
> leadership1$age[leadership1$age>75]<-"Elder"
> leadership1$age[leadership1$age<=75 & leadership1$age>=55]<-"Middle Aged"
> leadership1$age[leadership1$age<=55]<-"Young"
> leadership1
manager date country gender age q1 q2 q3 q4 q5 sum
1 1 10/24/08 US M Young 5 4 5 5 5 24
2 2 10/28/14 US F Young 3 5 2 5 5 20
3 3 10/01/14 UK F Young 3 5 5 5 2 20
4 4 10/12/14 UK M Young 3 3 4 NA NA NA
5 5 05/01/14 UK F Elder 2 2 1 2 1 8
变量的重命名
用fix()函数修改变量名
> fix(leadership1)
image.png
不仅可以修改变量名称,还可以修改变量的类型
缺失值
is.na()函数判断缺失值是否存在
> is.na(leadership1[,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
可以看到数据框中有两个缺失值
用na.omit()函数来删除缺失值
> leadership1<-na.omit(leadership1)
> leadership1
manager date country gender age q1 q2 q3 q4 q5 sum
1 1 10/24/08 US M Young 5 4 5 5 5 24
2 2 10/28/14 US F Young 3 5 2 5 5 20
3 3 10/01/14 UK F Young 3 5 5 5 2 20
5 5 05/01/14 UK F Elder 2 2 1 2 1 8
可以看到含有缺失值的一行已经被删除
数据排序
可以用order()函数对一个数据框进行排序,默认为升序,在排序变量前加上一个减号可以降序排序
> newdata<-leadership[order(leadership$age),]
> newdata
manager date country gender age q1 q2 q3 q4 q5
3 3 10/01/14 UK F 25 3 5 5 5 2
1 1 10/24/08 US M 32 5 4 5 5 5
4 4 10/12/14 UK M 39 3 3 4 NA NA
2 2 10/28/14 US F 45 3 5 2 5 5
5 5 05/01/14 UK F 99 2 2 1 2 1
> newdata<-leadership[order(-leadership$age),]
> newdata
manager date country gender age q1 q2 q3 q4 q5
5 5 05/01/14 UK F 99 2 2 1 2 1
2 2 10/28/14 US F 45 3 5 2 5 5
4 4 10/12/14 UK M 39 3 3 4 NA NA
1 1 10/24/08 US M 32 5 4 5 5 5
3 3 10/01/14 UK F 25 3 5 5 5 2
数据集的合并
向数据框中添加列
可以用merge()函数
total<-merge(dataframeA,dataframeB,by="ID")
这条语句的意思是将数据框A和数据框B按照ID进行合并
从数据集中选区特定的子集
最常用的是subset()函数
> newdata<-subset(leadership,age>=30 & age<=50)
> 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/14 US F 45 3 5 2 5 5
4 4 10/12/14 UK M 39 3 3 4 NA NA
newdata<-subset(leadership,age>=30 & age<=50,select = c(q1,q2,q3,q4,q5))
> newdata
q1 q2 q3 q4 q5
1 5 4 5 5 5
2 3 5 2 5 5
4 3 3 4 NA NA
其中select用于选区要保留的列
以上就是基本数据的管理