美文网首页
Rstudio基础函数

Rstudio基础函数

作者: apricoter | 来源:发表于2019-01-15 17:35 被阅读68次

1.系统设置与帮助

#返回所有满足正则表达式topic的对象名称
apropos("topic")
#返回对象的内在属性
a<-c(1,2,3)
str(a)#num [1:3] 1 2 3
#返回对象的类型
mode(a)#"numeric"
#获得工作路径信息
getwd()
#设置工作路径信息
setwd()
#设置全局参数
options()
#将x指向R的搜索路径
attach(x)
#显示搜索路径
search()
#修改x
fix(x)
#消除所有变量
rm(list=ls())
#返回当前使用的内存大小
memory.size()

2.数据创建

#seq函数
a<-seq(from=3,by=0.5,length=5)
a#产生一个指定间距与长度的序列
b=seq(1,6)
b#产生1,2,...,length(along),常用于循环
#rep函数
x <- c(1,2,3)
rep(x,times=3) #“times”参数表示x的重复次数
rep(x,each=2)#参数“each”表示每个元素重复的次数
rep(x,times=3,length.out=2) #参数“length.out”表示截取前多少个元素
#把向量x编码为因子
factor(x,levels = )
#组合矩阵、向量框、数据框等
rbind()#以行的形式
cbind()#以列的形式
merge(x, y, by = , by.x = , by.y = , ...)#x与y指定用于合并的数据框,by对应x和y共有的列名,后面by.x与by.y用于分别指定用于合并的列名。

3.数据分割与选取

#向量
x[-n]#除了第n个元素的x
x[-(1:n)]#第n+1至最后的元素
x[c(1,2,4)]#指定元素
x[x>3]
x[x>3&x<5]#区间(3,5)的元素
x[x %in% c("a","and")]#给定组中的元素
#列表
x[[n]]#列表的第n个元素
#矩阵
x[,c(1,3)]#第1和第3列

4.数据选择与操作

#赋值
x=2
x<-2
2->x
assign(x,2)
#颠倒元素
rev(x)
#升序排列元素
sort(x)
#降序排列元素
rev(sort(x))
#或者
sort(x,decreasing = FALSE)#升序排列
sort(x,decreasing = TRUE)#降序排列
#更改/新增变量
transform(data, x = y / z)
#找到序列中最大值所在的位置
which.max(b)
#找到序列中的最大值
b[which.max(b)]
#或者
max(b)
#x中每个元素在y中对映的位置,返回和x相同长度且和y中元素相等的向量
match(x,y)
a <- c(20,10,12)
b <- 10:20
match(a,b)
#将x分割为几段,将一个连续性变量切割成很多个小片段。输入是一个数值向量,输出是一个因子,因子的每个水平对应输入向量的每个区间范围。
cut(x,breaks = )
#如果比较操作为真,返回向量x的索引
which(x==a)
#去除缺失值NA
na.omit(x)
#返回错误信息,如果x包含至少一个x
na.fail(x)
#根据条件截取
subset(x,..)#通过-号保留或去除变量

5.数学运算

#向量x的差分
diff(x)
#x中元素连乘
prod(x)
#4的阶乘
prod(2:4)
#x的中位数
median(x)
#计算数据中间50%的范围
IQR(x)
#加权平均
weighted.mean(x,w)
#求秩
rank(x)
#约数
floor(3.2)#3
floor(5.6)#5,floor向下舍入为指定小数位数
round(2.4)#2
round(2.8)#3
round(2.88,1)#2.9,round遵循四舍五入把原值转化为指定小数位数
ceiling(2.5)#3
ceiling(2.3)#3,ceiling向上舍入为指定小数位数
#取对数
log(x,base = )
#中心化或标准化
scale(x,center = FALSE)#标准化
scale(x,scale = FALSE)#中心化
scale(x)#默认既中心化又标准化
#抽样
sample(x,size,replace = TRUE)#放回随机抽样
sample(x,size)#默认不放回
#内积,对应元素相乘
x*y
#求累积和
x=c(4,3,2,1)
x
cumsum(x)#4 7 9 10
#从左至右求累计乘积
cumprod()
#极差
range()
#四分位数
quantile()
#五分位数
fivenum()
#找唯一性,丢掉重复的数
unique()
#两个向量的并
union(x,y)
#两个向量的交
intersect(x,y)
#求向量x与向量y中不同的元素(只取x中不同的元素),即x-x∩y
setdiff(x,y)
#判断x与y是否相等
setequal(x,y)
#判断x是否为y中的元素
x %in% y
#复数的实部
Re(x)
#虚部
Im(x)

6.矩阵

#改变为先行后列
x=matrix(1:6,nrow = 2,ncol = 3,byrow = TRUE)
#默认先列后行
y=matrix(1:6,nrow = 2,ncol = 3)
#改变行名称
z=matrix(1:6,nrow=2,2,3,dimnames = list(rownames=c("ww","qq")))
#行列相等才能相加减
A=B=matrix(1:12,nrow=3,ncol=4)
A+B
#A为m×n矩阵,B为n×k矩阵,在R中求AB可用符号:“%*%
A=matrix(1:12,nrow=4,ncol=3)
B=matrix(1:12,nrow=4,ncol=3)
t(A)%*%B
#使用crossprod更快速
crossprod(A,B)
#转置
t(x)
#对角阵
diag(A)
#求行列式
det(x)
#对矩阵应用函数
apply()
#1表示按行
apply(x,1,sum)
#奇异值分解
svd() 
#QR分解
qr() 
#对于正定矩阵A,可对其进行Choleskey分解,即:A=P'P,其中P为上三角矩阵,在R中可以用函数chol()进行Choleskey分解
chol()
#得到特征值与特征向量
eigen()
#运算结果是解线性方程组ax = b
solve(a, b)
#矩阵的逆
solve(a)
#查看维数
dim()
#矩阵对象行加和
rowSums(x)
#矩阵对象列加和
colSums(x)
#行平均
rowMeans(x)
#列平均
colMeans(x)
#计算矩阵x行间的距离
dist(x)

7.数组

#apply
w=array(1:12,dim=c(2,3,2),dimnames=list(c("A","B"),c("X","Y","Z"),c("M","N")))
w
apply(w, 2, sum)
apply(w,c(1,3),sum)#1=rows,2=columns,3=matrices

8.列表

x=list(num=c(1,2,3),"nick",identity=diag(2))
x

9.字符串

#将字母转换为小写
tolower(x)
#将字母转换为大写
toupper(x)
#变化x为大写或者小写
x="aBcD"
casefold(x,upper = TRUE)
#table中匹配x元素位置组成的向量
match(x,table)
# sep和collapse
a = c(1,2,3,4,5)
names(a) = c('m','n','o','p','q')
b = paste(a, names(a), sep = "/")
b
c = paste(b, collapse = ",")
c
# paste和cat
a<-c(1,2,3,4)
b<-c(4,5,6,7)
c<-c('hi','hello')
paste(a,b,c)
#paste()函数里默认有一个参数“sep="空"”,表示将不同对象组合时默认用空格隔开,修改为sep=""即可
cat(a,b,c)#1 2 3 4 4 5 6 7 hi hello

#paste()可以通过sep参数指定分隔符号,而collapse参数可以用来指定这些值之间的连接符号。
x <- c("a", "b", "c", "d", "e")
y <- c("A", "B", "C", "E", "F")
# 默认
paste(x, y)
# 使用自定义分隔符
paste(x, y, sep = ",")
# 指定连接符
paste(x, y, sep = "-", collapse = "#")
# paste和paste0
a=paste("Hello","world")
a#在不指定分割符的情况下,paste默认分割符是空格 
b=paste0("Hello","world")
b#使用简化版的paste0函数只提供连接参数,没有分隔,即直接相连
# assign和get
assign(paste("a","1",sep=""),2)
a1#assign这个函数的作用是给变量x赋值
a1=1
get(paste("a","1",sep=""))#get()函数只是在环境中搜索该变量名的变量,如果该变量不存在则返回异常
#nchar与length
nchar("abcd")#nchar表示字符串中的字符的个数
length("abcd")#length表示向量中元素的个数
length(c("hello", "world"))
#字符串替换
chartr(old="a", new="c", x="a123")
chartr(old="a", new="A", x="data")
#字符串分割
strsplit("abc", split = "")#可以指定分割符,生成一个list
#字符串截取
substr(x = "hello", start = 1, stop = 2)



10.日期和时间

#精简和无精简"星期天"名
%a,%A 
#精简和无精简月名
%b,%B
#月份中的日期
%d(01-31)
#小时
%H(00-23)%I(01-12)
#年份中的日期
%j(001-366)
#月份
%m(01-12)
#分钟
%M(00-59)
#返回日期x的星期几
weekdays(x)
#返回日期x的月份
months(x)
#返回日期x的季节
quarters(x)

11.apply族

#apply:对每个小片断独立进行操作
#apply(X, MARGIN, FUN, ...)
#X:数组、矩阵、数据框;
#MARGIN: 按行计算或按按列计算,1表示按行,2表示按列
#FUN: 自定义的调用函数
#按行循环,让数据框的x1列加1,并计算出x1,x2列的均值。
x <- cbind(x1 = 3, x2 = c(4:1, 2:5)) 
x
# 自定义函数myFUN,第一个参数x为数据
# 第二、三个参数为自定义参数,可以通过apply的'...'进行传入。
myFUN<- function(x, c1, c2) {c(sum(x[c1],1), mean(x[c2]))}
# 把数据框按行做循环,每行分别传递给myFUN函数,设置c1,c2对应myFUN的第二、三个参数
apply(x,1,myFUN,c1='x1',c2=c('x1','x2'))
#也可以通过for循环来实现
# 定义一个结果的数据框
df<-data.frame()
# 定义for循环
for(i in 1:nrow(x)){
  row<-x[i,]# 每行的值
  df<-rbind(df,rbind(c(sum(row[1],1), mean(row))))#计算,并赋值到结果数据框
}
# 打印结果数据框
df
#也可以直接通过向量化来实现
data.frame(x1=x[,1]+1,x2=rowMeans(x))
#lapply
#用来对list、data.frame数据集进行循环,返回和X长度同样的list结构作为结果集
#apply可以很方便地把list数据集进行循环操作,还可以用data.frame数据集按列进行循环,但如果传入的数据集是一个向量或矩阵对象,那么lapply会分别循环矩阵中的每个值,而不是按行或按列进行分组计算
#生成一个矩阵
x <- cbind(x1=3, x2=c(2:1,4:5))
x
#求和
lapply(x, sum)
#如果对数据框的列求和,lapply会自动把数据框按列进行分组,再进行计算
lapply(data.frame(x), sum)
#sapply
#sapply函数是一个简化版的lapply,sapply增加了2个参数simplify和USE.NAMES,主要就是让输出看起来更友好,返回值为向量,而不是list对象
#sapply(X, FUN, ..., simplify=TRUE, USE.NAMES = TRUE)
#simplify: 是否数组化,当值array时,输出结果按数组进行分组
#USE.NAMES: 如果X为字符串,TRUE设置字符串为数据名,FALSE不设置
x <- cbind(x1=3, x2=c(2:1,4:5))
x
#对矩阵计算,计算过程同lapply函数
sapply(x, sum)
#对数据框计算
sapply(data.frame(x), sum)
#检查结果类型,sapply返回类型为向量,而lapply的返回类型为list
class(lapply(x, sum))
class(sapply(x, sum))
#如果simplify=FALSE和USE.NAMES=FALSE,那么完全sapply函数就等于lapply函数了
lapply(data.frame(x), sum)
sapply(data.frame(x), sum, simplify=FALSE, USE.NAMES=FALSE)
#对于simplify为array时,我们可以参考下面的例子,构建一个三维数组,其中二个维度为方阵
a<-1:2
#按数组分组
sapply(a,function(x) matrix(x,2,2), simplify='array')
#默认情况,则自动合并分组
sapply(a,function(x) matrix(x,2,2))
#对于字符串的向量,还可以自动生成数据名
val<-head(letters)
#默认设置数据名
sapply(val,paste,USE.NAMES=TRUE)
# USE.NAMES=FALSE,则不设置数据名
sapply(val,paste,USE.NAMES=FALSE)
#tapply
#tapply用于分组的循环计算,通过INDEX参数可以把数据集X进行分组,相当于group by的操作
#tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)
#simplify : 是否数组化,当值array时,输出结果按数组进行分组
#比如,计算不同品种的鸢尾花的花瓣(iris)长度的均值
#通过iris$Species品种进行分组
tapply(iris$Petal.Length,iris$Species,mean)
#对向量x和y进行计算,并以向量t为索引进行分组,求和
set.seed(1)
#定义x,y向量
x<-y<-1:10;x;y
#设置分组索引t
t<-round(runif(10,1,100)%%2);t
#对x进行分组求和
tapply(x,t,sum)
#由于tapply只接收一个向量参考,通过’…’可以把再传给你FUN其他的参数,那么我们想去y向量也进行求和,把y作为tapply的第4个参数进行计算
tapply(x,t,sum,y)
#得到的结果并不符合我们的预期,结果不是把x和y对应的t分组后求和,而是得到了其他的结果。第4个参数y传入sum时,并不是按照循环一个一个传进去的,而是每次传了完整的向量数据,那么再执行sum时sum(y)=55,所以对于t=0时,x=8 再加上y=55,最后计算结果为63。那么,我们在使用’…’去传入其他的参数的时候,一定要看清楚传递过程的描述,才不会出现的算法上的错误。

12.aggregate

#首先将数据进行分组(按行),然后对每一组数据进行函数统计,最后把结果组合成一个比较nice的表格返回。根据数据对象不同它有三种用法,分别应用于数据框(data.frame)、公式(formula)和时间序列(ts):
#aggregate(x, by, FUN, ..., simplify = TRUE)
#aggregate(formula, data, FUN, ..., subset, na.action = na.omit)
#aggregate(x, nfrequency = 1, FUN = sum, ndeltat = 1, ts.eps = getOption("ts.eps"), ...)
#例1:构造一个很简单的数据,一组人的性别、年龄和身高,可以用aggregate函数来求不同性别的平均年龄和身高
x=data.frame(name=c("张三","李四","王五","赵六"),sex=c("M","M","F","F"),age=c(20,40,22,30),height=c(166,170,150,155))
aggregate(x[,3:4],by=list(sex=x$sex),FUN=mean)
#例2:mtcars 是不同类型汽车道路测试的数据框类型数据
attach(mtcars)
#使用aggregate函数按cyl(汽缸数)进行分类计算平均值
aggregate(mtcars, by=list(cyl), FUN=mean)
#by参数也可以包含多个类型的因子,得到的就是每个不同因子组合的统计结果
aggregate(mtcars, by=list(cyl, gear), FUN=mean)
#公式(formula)是一种特殊的R数据对象,在aggregate函数中使用公式参数可以对数据框的部分指标进行统计
aggregate(cbind(mpg,hp) ~ cyl+gear, FUN=mean)
#上面的公式 cbind(mpg,hp) ~ cyl+gear 表示使用 cyl 和 gear 的因子组合对 cbind(mpg,hp) 数据进行操作

13.split

#split:把要处理的数据分割成小片断
#split()可以按照分组因子,把向量,矩阵和数据框进行适当的分组。它的返回值是一个列表,代表分组变量每个水平的观测。这个列表可以使用sapply(),lappy()进行处理
#split( )的基本用法是:group <- split(X,f)
#其中X 是待分组的向量,矩阵或数据框。f是分组因子
#例1:对向量分组
library(MASS)
#使用Cars93数据集,利用其中的Origin变量(两个水平),对Price变量分组
g<-split(Cars93$Price,Cars93$Origin) 
g#分组结果是个列表
#计算组的长度和组内均值
sapply(g,length)
sapply(g,mean)

#用lapply也可以,返回值是列表
lapply(g,mean)
#例2:对矩阵分组(按列)
m<-cbind(x=1:10,y=11:20)
m
split(m,col(m))
#例3:对数据框进行分组
g<-split(Cars93,Cars93$Origin)
g
#分组结果
summary(g)
#split还有一个逆函数,unsplit,可以让分组完好如初。
#在base包里和split功能接近的函数有cut(对属性数据分划),strsplit(对字符串分划)以及subset(对向量,矩阵或数据框按给定条件取子集)等。

14.绘图参数

#文字对齐方式
adj(0左对齐,0.5居中对齐,1右对齐)
#背景颜色
bg(colours()可显示657种可用颜色)
#图形边框形状
bty("o","l","7","c","u")("n"不绘制边框)
#符号和文字的大小
cex
#符号和连线的颜色
col
#文本字体
font(1正常,2斜体,3粗体,4斜粗体)
#坐标轴刻度数字的方向
las(0平行于轴,1横排,2垂直,3竖排)
#连线的类型
lty(0-9)
#连线的宽度
lwd(默认1)
#符号的类型
pch(1-25)
#设置x轴但不显示
xaxt="n"

15.低级绘图

#散点图
plot(x,y)
#频数直方图
hist(x) 其中prob=TRUE表示纵坐标为频率,FALSE为频数
#条形图
barplot(x)
#点图
dotchart(x)
#拼图
pie(x)
#箱线图
boxplot(x)
#密度曲线图
density(x)
#Q-Q图
qqnorm(x) 与之对应Q-Q线为qqline()
#累计分布函数(给出正态分布随机数小于x的概率y)
pnorm(x, mean = 2.5, sd = 2)
#以上逆运算为(由y求x)
qnorm(y, mean = 2.5, sd = 2)
#马赛克图
mosaicplot(x)#可看做是分类变量间的散点图,也可以用于观察数字型变量的关系
#太阳花图
sunflowerplot(x)#每个重复值由太阳花展示,每个花瓣代表某个数据点的一次重复
#在前一个图上添加
add=TRUE或者lines()
#指定绘制图的类型
type=("p"点,"l"线,"b"用线连成的点,"o"用线连成的点,但线穿过点)
#在坐标点上添加文字
text(x,y,labels = )
#从(x0,y0)划线至(x1,y1)
segments(x0,y0,x1,y1)
#箭头
arrows(x0,y0,x1,y1,angle = 30,code=2
#code=2表示以(x0,y0)为原点,code=1表示以(x1,y1)为原点,code=3为双箭头
#添加斜线
abline(a,b)#截距a斜率b
abline(h=y)#在y点的垂线
abline(v=x)#在x点的水平线
#图例
legend(x,y,legend)

16.统计

#方差分析
aov(formula
anova(fit,..)
#核密度估计
density(x)
#K均值聚类
kmeans(x)
#层次聚类分析
hclust(d,method="complete")
#主成分分析
prcomp(x)
#因子分析
factanal(x,factors,data)

17.模型拟合

#计算预测值
predict(fit,..)
#返回残差的自由度
df.residual(fit)
#返回被估计的系数
coef(fit)
#返回残差值
residuals(fit)
#返回方差
deviance(fit)
#返回拟合值
fitted(fit)
#计算AIC
AIC(fit)

相关文章

网友评论

      本文标题:Rstudio基础函数

      本文链接:https://www.haomeiwen.com/subject/rgnedqtx.html