本部分跟随本人学习笔记_1,受限于帖子字数及格式限制,重新作为新帖发表。学而时习之,继续加油!
C4基本数据管理处理
1.创建新变量:原:mydata=data.frame(x1,x2),希望增加平均值:mydata=transform(mydata, #原数据
meanx=(x1+x2)/2)
2.语句variable[condition] <- expression将仅在condition的值为TRUE时执行赋值
例如,处理age=99为缺失值:leadership$age[leadership$age==99]<-NA.
3.变量重命名:可使用交互式编辑界面:fix(x)或者使用names来更改,eg:
names(x);#显示x的列名:A B C D
names(x)[2]<-"h"
names(x) #显示x的列名:A h C D
4.变量重编码:可参考笔记中的:数据整形(reshape)
5.日期值处理:
5.1R中默认的日期值格式为:yyyy-mm-dd,使用函数:as.Date(x,”x的日期格式")可将日期变量转成系统默认格式
例如:
>strdates<-c("01/23/1987","03/09/1986")
> dates<-as.Date(strdates,"%m/%d/%Y")#著名原来的日期格式
> dates
[1] "1987-01-23" "1986-03-09"
当前日期:Sys.Date()(显示:"2015-09-10"),日期及时间:date()(#显示:"Thu Sep 10 16:35:44 2015")
5.2format(x,format="output_format") format函数可接受一个参数(例子为日期)并按某种格式输出结果(符号组合见下图)。
表4-4 R日期格式 |
| 符合 | 含义 | 示例 |
| %d | 数字表示的日期(0-31) | 01~31 |
| %a | 缩写的星期名 | 周一 |
| %A | 大写星期名 | 星期一 |
| %m | 月份(00-12) | 00~12 |
| %b | 缩写的英文月份 | 1月 |
| %B | 大写的英文月份 | 一月 |
| %y | 两位数的年份 | 07 |
| %Y | 四位数的年份 | 2007 |
检查某天是周几:weekdays(as.Date("")) #weekdays()需为.Date格式的
检查多少天:dsys<-A-B(A、B均为.Date格式)或者使用:difftime(A,B,units="weeks"/"days"/"sec"/"hours")(A、B为.Date格式)
日期转字符:as.character()——较少使用
5.3判断类型并将其转换的函数
表4-5 R类型转换函数
| 判断 | 转换 |
| is.numeric() | as.numeric()
|
| is.character() | as.character() |
| is.vector() | as.vector() |
| is.matrix() | as.matrix() |
| is.data.frame() | as.data.frame() |
6.数据排序order()-——默认为升序,在数据前加减号,可进行降序排序
EG:
>attach(leadship) #统一饮用
> newleadship2<-leadship[order(gender,age),] #针对gender,age进行
> newleadship2
7.数据集的合并
7.1添加列:横向合并两个数据框(数据集),使用merge()函数(类似为内链接,inner join)
eg:total<-merge(dataframeA,dataframeB,by=c("ID","Country"))#将两个数据框按照ID和Country进行合并。
如果直接横向合并两个矩阵或数据库,并且不需要指定一个公共指引,可以直接使用cbine()函数。total<-cbind(A,B)(要求:每个对象A,B必须拥有相同的行数,且以相同顺序排序。)
7.2添加行
纵向合并两个数据库(数据集),使用rbind(A,B)函数。(要求:两个数据框拥有相同变量,不同需提前处理)
8.数据集取子集
1.选入(保留)变量
方法:1.可以使用下标来选择,eg:A<-matrix(1:20,4,5),需要后两列数据,则:B<-A[,4:5]或者B<-A[,c(4,5)]
2.使用列名称选择:eg:A列名称为q1,q2,q3,q4,q5。选择后两列,则:B<-A[c("q4","q5")]
或者 myvars<-paste("q",4:5,sep="")
B<-A[myvars]
2.剔除(丢弃)变量
方法:1.使用下标标为负值,eg:leadership中不需要3,4列,B<-leadship[c(-3,-4)]
2.使用TorF,eg:
var<-names(leadership)%in%c("q3","q4") #返回值为TorF,当为q3,q4时为T,其余为F
B<-leadership[!var] #!var得到与var相反的TorF,其中F不在leadership中不显示
3.选入观测
1)data<-x[1:3,] #前三行数据,全列
2)data<-x[which(x$x1=="条件"&x$x2>20(条件)),]筛选符合条件的行,列全选
3)使用attach(x)来简便操作:attach(x)
data<-x[which(x1=="cond"&x2>20(cond)),]
4.subset()函数
subset(x,subset(行选取的条件/子集条件,可省略),
select=条件(列选取的条件,可省略))
eg:data<-subset(leadship,age>35|age<24,select=paste("q",1:3,split=""))
9.使用SQL语言
需要安装sqldf包,eg:
sqldf("select avg(mpg) as avg_mpg,avg(disp) as avg_disp,gear from mtcars where cyl in (4,6) group by gear")