文章目录
-
-
- 一、语言风格
- 二、基础命令
- 三、运算符、函数和编程
-
- 四、数据基础
-
- 五、一般绘图
一、语言风格
- 基于S语言开发
- 大小写敏感,句末不用加分号
\
:路径中使用 & /
:转义字符
#
:注释符
- R中没有标量;下标不从0而从1开始;变量无法被声明,在首次赋值时产生
二、基础命令
命令 |
功能 |
getwd() |
查看当前工作目录 |
setwd(" ") |
设定当前工作目录(文件路径要加 " ") |
dir.create(" ") |
创建新目录 |
source(" ") |
在当前会话中执行某个脚本 |
sink() |
重定向文本输出(append=TRUE,split=TRUE) |
dev.off |
将输出返回到终端 |
q() |
退出程序 |
ls() |
列出当前工作空间中的对象 |
rm() / rm(list=ls()) |
删除对象 |
?xxx / ??xxx |
帮助 |
demo() |
图形演示 |
install.packages(“xxx”) - library(xxx) |
包的安装和调用 |
search() - libPaths()… |
查看已载入的包,显示库的位置 |
三、运算符、函数和编程
运算符
符号 |
含义 |
符号 |
含义 |
<- |
赋值 |
^ / ** |
求幂 |
x%%y |
求余 |
x%/%y |
整数除法 |
%in% |
属于 |
|
|
函数
数学函数
统计函数
概率函数
字符处理函数
其它实用函数
将函数应用于矩阵、数组和数据框 apply(mydata, MARGIN=1<行>/2<列>,FUN)
将函数应用于列表 lapply / sapply
前缀 |
含义 |
函数 |
含义 |
d~ |
求某个点处的概率值(pdf/pmf) |
~binom() |
二项分布 |
p~ |
求累积概率值(cdf) |
~multinom() |
多项分布 |
q~ |
求p分位点 |
~pois |
泊松分布 |
r~ |
产生符合分布的随机观测 |
~norm |
正态分布 |
函数 |
功能 |
函数 |
功能 |
mean() |
均值 |
sd() |
标准差 |
cor() |
相关度 |
isTRUE() |
测试是否为真 |
log() |
自然对数 |
log10() |
以10为底的对数 |
set.seed(a) |
设定随机种子 |
runif(n) |
生成0-1上n个伪随机数 |
mvrnorm(n,mean,sigma) |
生成多元正态数据 |
rep() |
复制 |
sum(x) |
求矩阵元素之和 |
rowSums/colSums |
求矩阵行/列元素之和 |
编程
循环语句
① for(var in seq) {
statement1; statement2}
② while(condition) {
statement1; statement2}
条件语句
① if(condition) statement1 <else statement2>
② ifelse(condition,statement1,statement2)
③ switch(var, statements)
用户自编函数
myfunction <- functions(arg1,arg2){
statements
return(object
}
四、数据基础
数据结构
1. 向量(包括标量)
赋值:a<-c("k","j","h")
取值:a[3] a[c(1,3)] a[1:3]
2. 矩阵(二维)
赋值:b<-matrix(vector,nrow,ncol,byrow=TRUE/FALSE,dimnames=<行标签和列标签>)
取值:b[2,] b[1,c(1,3)] b[1:3,2:3]
3. 数组(>二维)
赋值:c<-array(vector,dimensions<各维下标最大值>,dimnames= )
取值:c[1,2,3]
4. 数据框(可以存储不同类型的变量)
赋值:d<-data.frame(col1,col2,...)
d<-as.data.frame(old_dataset[ , ])
取值:d[1:2] (只有一个维度可以取值)
5. 列表(可以由向量、矩阵、数组、数据框、列表等共同构成)
赋值:e<-list(name1=obj1,name2=obj2,...)
取值:e[[2]] e[["xxx"]]
变量类型:日期型、连续型、名义型、有序型 [名义型or有序型 → 类别型 → 因子factor]
可处理数据类型:数值型numeric、字符型character、逻辑型TRUE/FALSE、复数型、原生型(字节)
因子factor(var,order=TRUE/FALSE,levels=c(),labels=c())
行/实例标识符rownames,用于区分数据集中不同的个体(相当于主键,用row.names="xxx"指定)
str(): 显示某个对象的数据结构
attach(): 将数据框添加到R的搜索路径中(避免出现同名对象的情况)
detach(): 将数据框从搜索路径中移除
with( ,{
}): 将数据框添加到R的搜索路径中(prefer)
数据输入
* 从键盘输入(用edit一定要赋值到一个目标,不然编辑会丧失)
mydata <- edit(mydata) / fix(mydata)
mydata <- data.frame(age=numeric(0)),gender=character(0))
or:直接在程序中嵌入数据集
* 导入带分隔符的文本文件
mydata <- read.table(file,options)
* 导入excel数据
mydata <- read.table(".csv",<options>)
library(xlsx) mydata <- read.xlsx("",n<工作表序号>)
or: 菜单栏操作
* 导入SAS数据
library(Hmisc) mydata <- sas.get()
* 导入xml/SAS/SPSS/STATA数据
* 从网上抓取数据(rvest)
数据管理
* 创建新变量
① mydata$sumx <- mydata$x1+mydata$x2
② attach(mydata)
mydata$sumx <- x1+x2
③ mydata <- transform(mydata,sumx=x1+x2)
* 数据集的标注
① 变量标签(只能将变量标签作为变量名)
names(mydata)[2] <- "xxx"
② 值标签(因子)
factor(c(),levels=c(),labels=c())
* 变量的重编码
variable[condition] <- expression
- leadership <- within(leadership,{
agecat<-NA,agecat[age>75]<-"elder"})
* 变量的重命名
① fix(mydata) 交互式编辑器
② names(mydata)[2] <- "xxx"
③ library(plyr)
mydata <- rename(mydata,c(var1="varA",var2="varB"))
* 缺失值(NA)
is.na() 检验缺失值是否存在(缺失值不可比较 var==NA ×)
is.infinite() 检验Inf和-Inf
is.nan() 检验类似sin(Inf)等
na.rm=TRUE 在数值函数中排除缺失值
na.omit() 移除所有含有缺失值的观测(行删除)
* 日期值
"%m/%d/%y" 一种日期格式
Sys.Date() 返回当天日期 date() 返回当天的日期和时间
format(var,format="xxx") 输出指定格式的日期值
difftime(x,y,units="...") 计算时间间隔(也可以两个日期直接相减)
as.Date(x,"xxx") 将字符型转化为日期型
as.character(dates) 将日期型转化为字符型
* 类型判断和转换
is.xxx() 类型判断(返回TRUE / FALSE)
as.xxx() 类型转换(将参数转换成对应类型)
* 数据排序
newdata <- mydata[order(var1,-var2), ] (默认升序,加负号降序)
* 数据集的合并
total <- merge(dataframeA,dataframeB,by="ID") 横向合并(通过公共索引)
total <- cbind(A,B) 横向合并(自然连接)
total <- rbind(A,B) 纵向合并(添加观测,两个数据框必须有相同变量)
* 数据集取子集
选入/保留变量 newdata <- mydata[ ,c(6:10)]
剔除/丢弃变量 ① newdata <- mydata[c(-8,-9)]
② mydata$8 <- mydata$9 <- NULL
③ delvars <- names(mydata) %in% c("8","9")
newdata <- mydata[!delvars]
选入观测(选子集)subset(mydata, conditions<...&...|...>, select=20:50)
随机抽样 mysample <- mydata[sample(1:nrow(mydata),n,replace=TRUE/FALSE), ]
* 整合与重构
转置 t()
整合 aggregate(x,by,FUN) (by中的变量一定在一个list中)
融合 library(reshape2) melt(mydata,id=c("xx","xx"))
重铸 library(reshape2) dcast(mydata,formula,fun.aggregate)
* 其他
- 生成var1和var2的列联表(提取计数) table(mydata$var1,mydata$var2)
- SQL语句操作数据框 library(sqldf) newdata <- sqldf("select * from mydata where ...")
五、一般绘图
* dev语句
dev.new() 新建窗口
dev.next() / dev.prev() / dev.set() 同时打开多个图形窗口
jpeg(" .jpg")/pdf(" .pdf")...dev.off() 保存图形/pdf输出
plots → export → save as
history → recording → next/pre
* 绘图操作
plot(x,y,type=<无:只有点 / "b":点+线 / "c":只有线>,<其他参数>)
hist() boxplot() barplot()
* 参数修改
par() 生成一个含有当前图形参数设置的列表
opar <- par(no.readonly=TRUE) 保存当前参数设置
par(pch=<符号形状>, cex=<符号大小>, lty=<线条类型>, lwd=<线条宽度>, col=<符号边界颜色>, bg=<填充色> ...)
* 颜色
* 文本
* 尺寸和边界
* 坐标轴、文本标签
main 标题 sub 副标题 title 可用于总设置
xlab/ylab x/y轴标签 xlim/ylim x/y坐标范围
par(ann=FLASE<禁用标题、标签>,axes=FALSE<禁用坐标轴>,xaxt="n",yaxt="n"<分别禁用x轴y轴>)
* 参考线
abline(h=yvalues,v=xvalues)
* 图例
legend(location,title,legend...)
* 文本标注/数学标注
text(), mtext(), plotmath()
* 图形组合和布局的精确控制
par(mfrow/mfcol=c(1,2)) 按行/列填充的1行2列的图形矩阵
layout(matrix(c(1,1,2,3),2,2,byrow=TRUE),width=c(3,1),heights=c(1,2)...
fig=...