[R] 1.基本数据管理

R in action整理,示例

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)

stringsAsFactors=FALSE

String是字符串,可用于记录琐细信息,Factor是因子,用于给一行记录做"分类标记",对于Factor类型属性,R语言可以自动统计数据的factor水平(level),比如:男,女分别有多少。stringsAsFactors = F意味着,"在读入数据时,遇到字符串之后,不将其转换为factors,仍然保留为字符串格式"。在读入数据框之后,仍然有机会可以对数据框的列进行factors转换的操作。

1.创建新变量

*运算符:+,-,*,/,^,x%%y,x%/y%

mydata<-data.frame(x1=c(2,2,6,4),x2=c(3,4,2,8))

1)mydata$sumx<-mydata$x1+mydata$x2

2)mydata<-transform(mydata,meanx=(x1+x2)/2)  #transform函数

2.变量重编码

*运算符:<,<=,>,>=,!=,==,!x,x|y,x&y,isTRUE(x)

①连续型变量修改为一组类别值

②错误编码替换成正确的

③基于一组分组线创建一个类似及格/不及格的变量

leadership$age[leadership$age==99]<-NA  #异常值记为NA,防止被错误分类

leadership$agecat[leadership$age>75]<-"Elder"

leadership$agecat[leadership$age>=55 & leadship$age<=75]<-"Middle Age"

leadership$agecat[leadership$age<55]<-"Young"

 

3.变量重命名

1)fix(leadership)

2)name(leadership)  #查看表

name(leadership)[2]<-"testDate"  #修改对应列的变量名 

3)name(leadership)[1:3]<-c("bianhao","riqi","guojia")  #批量修改

 

4.缺失值

1)leadership$age[leadship$age==99]<-NA  #将异常值确定为缺失值

2)is.na(leadership[,6:10])  #is.na()函数查找缺失值

3)排除缺失值:

①x<-c(1,2,NA)  ¿  y<-sum(x,na.rm=TRUE) #na,rm=TRUE不将NA值计算在内

②na.omit(leadership) #na.omit()函数删除包含NA的观测

 

5.日期值

*Sys.Date()  #返回当天日期  date()  #返回当前日期

符号

含义

%d

数字表示的日期,01-31

%a

所写的星期名,Mon

%A

完整的星期名,Monday

%m

月份,00-12

%b

所写的月份,Jan

%B

完整的月份,January

%y

两位数的年份,07

%Y

完整的年份,2007

1)myformat<"-%m/d%/y"  #定义日期格式

2)leadership$date<-as.Date(leadership$date,myformat)  #调整为myformat格式

 

6.类型转换

判断

转换

备注

is.numeric()

as.numeric()

数值

is.character()

as.character()

字符

is.vector()

as.vector()

向量

is.matrix()

as.matrix()

矩阵

is.data.frame()

as.data.frame()

数据框

is.factor()

as.factor()

因子

is.logical()

as.logical()

逻辑

 

7.数据排序

*默认升序,在排序变量前加-改为降序

attach(leadership)  #绑定表

newdata<-leadership[order(gender, -age),]  #设定排序,此处符号勿忘

detach(leadership)  #解绑

 

8.数据合并

①横向合并,且有公共索引  #merge()函数有索引的横向合并

total<-merge(dataframeA, dataframeB, by="ID")

total<-merge(dataframeA, dataframeB, by=c("ID","Country"))

②横向合并,无公共索引直接拼接  #cbind()函数横向拼接

total<-cbind(dataframeA, dataframeB)

③纵向合并  #rbind()函数纵向拼接

total<-rbind(dataframeA, dataframeB)

两者要有相同的变量,不一定要顺序相同,如果A中有B中没有的变量,可以先删除A中多余的变量,或者在B中追加变量并设置为NA

 

9.子集相关

①保留变量

1)temp<-c("q1","q2","q3","q4","q5")

2)newdata<-leadership[temp]  #或者在知道位置的情况下

newdata<-leadership[c(6:10)]

②剔除变量

1)temp<-c("q1","q2","q3","q4","q5")

2)newdata<-leadership[!temp]  #同保留

③选取观测

newdata<-leadership[1:3,]  #选取前三个观测,选择变量的话,在前

newdata<-leadership[leadership$gender=="M"]  #选取男性

或者:

attach(leadership)  #用绑定可以省略掉下方的数据框名称

newdata<-leadership[gender=="M" & age>30]  #选取三十岁以上的男性

detach(leadership)

④subset()函数

newdata<-subset(leadership, age>=35|age<20, select=c(q1,q2,q3))

#此处q1,q2,q3没有用"",加上""也可以正常执行,与上方不一致,原因暂时未知 18/7/12

newdata<-subset(leadership, age>=35|age<20, select=c(gender:q5))

⑤随机抽样

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

10.利用SQL语句操作

装sqldf包后:sample<-sqldf("select * from leadership where manager=1")

猜你喜欢

转载自blog.csdn.net/Edward_is_1ncredible/article/details/81018087