1.R的使用
1.3.基础命令
函数 | 说明 |
---|---|
example(‘foo’) | 查看函数示例 |
data() | 查看已加载可用的数据集 |
vignette(‘foo’) | 查看主题为foo可用的vignette文档 |
getwd() | 显示当前工作目录 |
setwd() | 修改工作目录 |
ls() | 显示工作空间的对象 |
rm(list=ls()) | 删除全部的对象 |
options() | 显示或设置当前选项 |
history(n) | 显示最近的n个命令 |
save.image(‘myfile’) | 保存工作空间到myfile中,默认是.RData |
load(‘myfile’) | 读取一个工作空间到当前会话 |
source(‘file_name’) | 在当前会话中执行一个脚本 |
sink(‘file_name’) | 重定向输出到文件,append是否追加,split=T则同时输出到屏幕和文件中 |
object.size(x)/1000000 | 查看变量占用的内存空间,M |
srirage.mode(x) | 改变变量的存储类型 |
storage.mode(x) <- “integer” | 改为整数型,可以看到该对象的大小会变为原来的一半 |
memory.size() | 查看现在的work space的内存使用 |
memory.limit() | 查看系统规定的内存使用上限,注意,在32位的R中,封顶上限为4G,无法在一个程序上使用超过4G (数位上限)。这种时候,可以考虑使用64位的版本 |
rm(object) | 删除变量 |
gc() | 做Garbage collection,否则内存是不会自动释放的,相当于你没做rm. |
rm(list=ls()) | 删除全部变量 |
图像输出
pdf(‘filename.pdf’) #重定向到图像输出
png(‘filename.png’)
jpeg(‘filename.jpeg’)
dev.off() #将输出返回到终端
2.数据结构
2.2.2.矩阵
matrix(vector, nrow=n, ncol=m, byrow=TRUE, dianames=list(rname, cname))
2.2.4.数据框
数据框绑定
attach()
detach()
with()
attach(mtcars)
plot(mpg, wt)
mpg
detach(mtcars)
with(mtcars, {
summary(mpg, disp, wt)
plot(mpg, disp)
plot(mpg, wt)
})
2.2.6.列表的引用
list[[n]]
4.数据管理
1.data.frame(col1,col2…,stringAsFactors=FALSE)
创建数据框的时候,不要将字符串转成因子
2.创建新变量
mydata = transform(mydata,
sumx = x1+x2,
meanx = (x1+x2)/2)
library(dplyr)
mutate(mydata, sumx = x1+x2, meanx = (x1+x2)/2)
4.3.变量重编码
!x:非x
x|y:或
x&y:与,和
isTRUE(x):测试x是否为true
mydata$age[mydata$age == 99] <-NA
mydata$agecat[mydata$age >=55 & mydata$age <=75] <- 'middle aged'
mydata = with(mydata, {
agecat <- NA
agecat[age>75] <-'elder'
agecat[age>=55 & age <=75] <- 'middle aged'
agecat[age<55] <- 'young' })
#epicalc包的recode函数
#看看有哪些因子水平,或者说不重复的取值
list = unique(data3$arpu)
#构建 old 列表
old <- c("(50,80)","(10,20]","0","(20,50]","(0,5]","(100,150]","(150,200]","(200,300]","(5,10]","[80,100]","300以上" )
#构建 new 列表
new <- c("低值","低值","低值","低值","低值","高值","高值","高值","低值","高值","高值")
library(epicalc)
recode(vars = "arpu",old,new,dataframe)
#recode 函数其实是用new替换原来的old,所以建议先复制一列,然后在复制的列上进行 recode 操作
#R的cut函数
aaa <- c(1,2,3,4,5,2,3,4,5,6,7)
cut(aaa, 3, dig.lab = 4, ordered = TRUE)
4.4.变量重命名
#1
fit(mydata) #交互式修改`
#2
library(reshape)
mydata = rename(mydata,
c(old_name1 = 'new_name1', old_name2 = 'new_name2',...))
#3
names(mydata)[2]='new_name'
4.5.缺失值
删除含有缺失值的行
na.omit(mydata)
4.6.日期
符号 | 含义 | 示例 |
---|---|---|
%d | 01-31天 | |
%a | 缩写的星期 | Mon |
%A | 非缩写的星期 | Monday |
%m | 月份 | 00-12 |
%b | 缩写的月份 | Jan |
%B | 非缩写的月份 | January |
%y | 两位数的年份 | 07 |
%Y | 4位数的年份 | 2007 |
as.Data(c('2007-06-22','2004-02-13'))
#系统日期
Sys.Date()
date()
format(Sys.Date(), format='%Y%m%d')
#日期加减
end_date - start_date
diff(today, that_day, units='weeks')
#lubridate包
4.8.排序
mydata = mydata[order[mydata$age),]
attach(mydata)
newdata = mydata[order(gender, -age),]
detach(mydata)
4.9.合并数据集
# merge,一种内连接,innder join
total = merge(data1, data2, by=c('id','country'))
rbind()
cbind()
4.10.子集
mydata[, c(6:10)]
mydata[, c(var1,var2,...)]
#丢弃变量
vars = names(mydata) %in% c('q3','q4')
mydata[!vars]
mydata[c(-8,-9)]
#删除变量
mydata$q4 <- NULL
4.10.进入观测
mydata = mydata[,1:3]
mydata[ which(mydata$gender == 'M' & mydata$age>30),]
attach(mydata)
mydata[which(gender == 'M' & age>30),]
detach(mydata)
subset(mydata,age>=35 | age<24, select=c(q1,q2,q3,q4))
subset(mydata, gender =='M' & age >25, select =gender:q4)
4.11.随机抽样
# 无放回随机抽样,抽10个样本
mydata[sample(1:nrow(mydata),10, replace=FALSE), ]
4.12.sql语句
library(sqldf)
newdata = sqldf('select * from mydata where carb=1 order by mpg', row.names=TRUE)
new_data = sqldf('select avg(mpg), avg(disp) as avg_disp, gear from mtcars where cyl in (4,6) group by gear')
5.高级数据管理
5.2.数值与字符处理函数
5.2.1.数学函数
函数 | 描述 |
---|---|
abs(x) | 绝对值 |
sqrt(x) | 平方根 |
x^2 | 平方 |
ceiling(x) | 向上取整 |
floor(x) | 向下取整 |
trunc(x) | 向零取整 |
round(x, digits=n) | 直接截断保留n位小数 |
signif(x) | 四舍五入保留n位小数 |
cos(x),sin(x),tan(x) | 余弦,正弦,正切 |
acos(x),asin(x),atan(x) | 反余弦,反正弦,反正切 |
cosh(x),sinh(x),tanh(x) | 双曲余弦,双曲正弦,双曲正切 |
acosh(x),asinh(x),atanh(x) | 反双曲余弦,反双曲正弦,反双曲正切 |
log(x,base=n) | n为底的对数,log(x)为自然对数,log10(x)为10常用对数 |
exp(x) | 指数 |
5.2.2.统计函数
函数 | 描述 |
---|---|
mean(x) | 平均数 |
median(x) | 中位数 |
sd(x) | 标准差 |
var(x) | 方差 |
mad(x) | 绝对中位差 |
quantile(x,probs=c(0.3,0.84)) | 分位数 |
range(x) | 范围 |
sum(x) | 求和 |
diff(x,lag=n) | 滞后差分 |
min(x),max(x) | 最小最大值 |
scale(x,center=T, scale=T) | 中心化(center=T)或标准化(center=T, scale=T) |
其他均值和方差的标准化
scale(mydata)*sd+mean
5.2.3.概率函数
d=密度函数
p=分布函数
q=分位数函数
r=生产随机数(随机偏差)
分布名称 | 缩写 | 分布名称 | 缩写 |
---|---|---|---|
正态分布 | norm | 非中心卡方分布 | chisq |
Beta分布 | beta | logistic分布 | logis |
二项分布 | binom | 多项分布 | multinom |
柯西分布 | cauchy | 负二项分布 | nbinom |
指数分布 | exp | 泊松分布 | pois |
F分布 | f | Wilcoxon符号秩分布 | signrank |
Gamma分布 | gamma | t分布 | t |
几何分布 | geom | 均匀分布 | unif |
超几何分布 | hyper | Weibull分布 | weibull |
对数正态分布 | lnorm | Wilcoxon秩和分布 | wilcox |
设定随机数种子
set.seed(1234)
5.2.4.字符串处理函
函数 | 描述 |
---|---|
nchar(x) | x的字符数量,注意和length(x)的区别 |
substr(x,start,stop) | 提取或替换子字符串,substr(‘abcde’,2,4)<-‘22222’ |
grep(pattern,x,ignore.case=F,fixed=F) | 正则表达式搜索,返回值为匹配的下标 |
sub(pattern,replacement,x,ignore.case=F,fixed=F) | 搜索并替换,如果fixed=T,则pattern是一个文本字符串 |
strsplit(x,split,fixed=F) | 在split处分割字符串,返回一个列表,用unlist()变成向量 |
paste(x,sep=”) | 连接字符串,指定分隔符 |
toupper(x) | 转大写 |
tolower(x) | 转小写 |
5.2.5.其他实用函数
函数 | 说明 |
---|---|
length(x) | 长度 |
seq(from,to,by) | 生产序列 |
rep(x,n,each=n) | 将x重复n次,指定each将会排序 |
cut(x,n) | 分割成n水平的因子 |
pretty(x,n)创建美观的分割点,在绘图中常用
cat(…,file=’myfile’,append=T)|连接…中的对象,并将其输出到屏幕或者文件中
5.3.apply-by系列
5.3.1.apply
# 1=对每行操作,2=对每列操作
apply(mydata, margin=1, fun=myfunc)
5.3.2.by,分组汇总操作
# 针对1:4列,根据species因子分组,求均值
by(iris[,1:4],Species,mean)
5.3.3.lapply
l=list(a=1:10,b=11:20)
lapply(l,mean)
5.3.4.sapply
lapply返回的是一个含有两个元素 a和 b的list,而sapply返回的是一个含有元素[[“a”]]和[[“b”]]的vector,或者列名为a和b的矩阵。
l=list(a=1:10,b=11:20)
l.mean=sapply(l,mean)
class(l.mean)
#提取元素a的均值
l.mean[['a']]
5.3.5.tapply
attach(iris)
#根据sprcies进行分类,计算petal的均值
tapply(iris$Petal.Length,Species,mean)
detach(iris)
7基本统计分析
7.1.1描述性统计分析
# 1.查看一般的统计量
vars = c('mpg','hp','wt')
summary(mtcars[vars])
# 2.对一列或多列应用多个函数
myfunc <- function(x, na.omit=Flase){
if(na.omit)
x = x[!is.na(x)]
m=mean(x)
n=length(x)
s=sd(x)
skew=sum((x-m)^3/s^3)/n
return(c(n=n,mean=m,stdev=s,skew=skew))
sapply(mtcars[vars],myfunc)
# 3.其他包里面的描述性统计量
library(Hmisc)
describe(mtcars[vars])
library(psych)
describe(mtcars[vars])
7.1.2分组汇总
vars = c('mpg','hp','wt')
# 1.简单的 aggregate
aggregate(mtcars[vars], by=(am=mtcars$am,vs=mtcats$vs),mean)
# 2.一般化的 by
myfunc = function(x)(c(mean=mean(x),sd=sd(x)))
by(mtcars[vars], mtcars$am, myfunc)
7.2.1列连表分析
library(vcd)
mydata = Arthritis
# 1.一维列联表
# 1.1 生成频数统计表
mytable = with(mydata, table(Improved))
# 1.2 将频数统计转成百分比
prop.table(mytable)
# 2.二维列联表
# 2.1 table的用法
mytable = table(A,B)
# 2.2 xtable的用法
mytable = xtabs(~ A+B, data=dataframe)
mytable = xtabs(~Treatment+Imporved, data=mydata)
# 2.3 添加边际和
addmargins(mytable)
# 2.4 转成百分比
prop.table(mytable)
# 3.三维列联表
mytable = xtabs(~Treatment+Imporved+Sex, data=mydata)
7.2.2 检验类别型(分类型变量)独立性的方法。
- 卡方独立性检验
- Fisher精确检验
- Cochran-Mantel-Heanszel卡方检验