我的学习笔记之R语言基础

数据分析的过程:
数据采集→数据存储→数据分析→数据挖掘→数据可视化→进行决策

与数据有关的对象

#1.纯量
N<-30;N  #整数
a<-59.9;a  #实数
b<- -3;b  #负数
c<-3+4i;c #复数
Name<-"Xue";Name   #字符串
L<-TRUE;L  #逻辑变量

#运算规则:先乘除,后加减,幂运算优先
(1+2*3+4/5+6^2)

#函数运算
sqrt(4)  #开平方
log(10)   #自然对数

#逻辑运算
3==5

#变量间的类型转换,例如,将数值型转换成字符型:
x<-3
y<-as.character(x);y

#判别变量是否属于某种类型:
is.numeric(y)

在这里插入图片描述

#2. 向量
#使用c()函数构造向量:
x<-c(1,2,3,4) ; x
#使用c()函数对向量进行连接,如
y<-c(x,0,x) ; y
#使用“:”构造向量,如
1:10
10:1
#对向量做逻辑运算,构造逻辑向量,如
y<-c(8,3,5,7,2,6) ; y>5

all(y>5)         #判断向量y中所有元素是否均大于5
any(y>5)       #判断向量y中是否有元素大于5
which(y>5)    #判断向量y中哪些元素大于5

#产生等距间隔数列函数:seq(),格式为seq(from=1,to=1,by=,length.out=NULL,along.with=NULL,…)
seq(0,1,length.out=11)
seq(1,9,by=2)
seq(1,9,by=pi)
seq(10)

#重复函数:rep(),将某一变量或向量重复若干次:rep(x,…)
rep(1:4,times=2)  #rep(1:4, 2) 
rep(1:4,length.out=10)
rep(1:4,each=2)
rep(1:4,c(1,2,2,3))

#向量的下标:
#X[i]表示向量x的第i个分量,如:
X<-c(1,4,7); X[2]    #向量中第2个分量
X<-10:20; X[c(1,3,5)]    #向量中第1,3,5个分量
#若x的长度是n,v是取值在-n至-1之间的向量,则x[v]是x中去掉v所表示的分量构成的向量,如:
X<-1:10; X[-(1:5)]
#V也能是逻辑向量,如:
X<-c(1,2,6); X[X<5]
#在定义向量时,可以同时给元素加上名字,这个名字就称为字符下标,如:
(ages<-c(Li=33,Zhang=29,Liu=18))

#3. 因子
#R中,用因子来表示名义变量或有序变量,函数factor()。其格式为
#factor(x=character(),levels,labels=levels,exclude=NA,ordered=is.ordered(x))
#data为数据向量,factor()将数据转换成因子(fdata)。
data=c(1,2,3,3,1,2,2,3,1,3,2,1)
(fdata=factor(data))
#可选项labels, 将默认因子转换成罗马数字.
(rdata=factor(data,labels = c("I","II","III")))

#另一种定义因子的函数:gl()函数,它定义有规律的因子向量,其使用格式为
#gl(n, k, length=n*k, labels=1:n, ordered=FALSE)
gl(3,5,labels = paste0("A",1:3))#3个水平,重复5次,因子水平的名称为A1 A2 A3
gl(5,1,length=15,labels=paste0("B",1:5))#5个水平,重复1次,生成因子向量长度为15,因子水平的名称为B1 ~B5

#4.矩阵
#生成矩阵的函数matrix(),其格式为
#matrix( data=NA, nrow=1, ncol=1, byrow=FALSE, dimnames=NULL)
#2行3列矩阵,数据按行排列,给每个行、列命名
mdat<-matrix(c(1,2,3,11,12,13), nrow=2, ncol=3, byrow=TRUE, dimnames=list(c("row1","row2"),c("c.1","c.2","c.3")))
mdat

A<-matrix(1:15, nrow=3, ncol=5);A   #3行5列矩阵,数据按列放置

#先生成一个空矩阵,随后再赋值,如
B<-matrix(nr=2,nc=3)
B[1,1]<-1;B[1,3]<-0; B

#将向量转换成矩阵,dim(x)<-value
x<-1:12;dim(x)<-c(3,4);x

#将向量或矩阵合并成一个矩阵:rbind() 函数和cbind()函数
X1<-rbind(1:2,3:4); X1
X2<-cbind(1:2,3:4);X2
X3<-rbind(X1,X2);X3
X4<-cbind(X1,X2);X4

#dim()函数除了可以将向量转化为矩阵,还可以获取对象的维数,如:
A<-matrix(1:15,nrow=3,ncol=5)
dim(A)      #获取矩阵A的行数和列数
nrow(A)    #获取行数    
ncol(A)      #获取列数

#as.vector()将矩阵转换为向量,即将矩阵拉直,如:
A<-matrix(1:15,nrow=3,ncol=5)
as.vector(A)

#访问矩阵的某个元素或为该元素赋值
A<-matrix(1:15,nrow=3,ncol=5)
A[1,2]      #第1行第2列位置的元素
A[1,2]<-100         #将第1行第2列位置的元素赋值为100
A[c(1,3),2:4]   #取第1行和3行,2到4列位置的元素
A[-3,-2]; A[-1, ]; A[ ,-2] #若取负数,表示去掉相应的行和(或)列


#5.数组
#生成数组array(), 格式为
#array(data=NA, dim=length(data),dimnames=NULL)
X<-array(1:20,dim=c(4,5));X
Y<-array (1:24,dim=c(3,4,2));Y
#也可用dim()函数构造数组,如
Y<-1:24
dim(Y)<-c(3,4,2)     

#数组的下标
a<-1:24
dim(a)<-c(2,3,4);a    #生成4个2×3矩阵
a[2,1,2]        #访问第2个矩阵的2行1列位置元素
a[1, , ]        #省略某一维的坐标,则表示该维全选
a[1,2:3,2:3]   #下标可以是向量

#6.列表
#列表是一种特别的对象集合,它的元素也由序号(下标)区分,但是各元素的类型可以是任意对象,
#不同元素不必是同一类型。元素本身允许是其他复杂数据类型,如列表的一个元素也可以是列表。
Lst<-list(name="Xue",wife="Xiao",no.children=2,child.ages=c(1,4)); Lst
#列表元素的引用:
Lst[[2]]
Lst[[4]][2]
#注:列表不同于向量,每次只能引用一个元素,如Lst[[1:2]]的用法是不允许的。

#列表的修改。赋值即可,如
Lst<-list(name="Xue",wife="Xiao",no.children=2,child.ages=c(1,4))
Lst$name<-"Changtao";Lst   
#若再增加一项性别:
Lst$sex<-"Male"

#7.数据框
#通常是矩阵形式的数据,但矩阵各列可以是不同类型。
#数据框每列为一个变量,每行为一个观测样本。
df<-data.frame(Name=c("Alice","Becka","James"),Sex=c("F","F","M"), Age=c(13,12,12),Height=c(56.5,65.3,60.1),Weight=c(84.0,98.0,88.2));df
#数据框的引用:
df[1:2,3:4]
df[["Height"]] 
#或 
df$Height

读写数据文件

#读数据文件
#1.读纯文本文件
#函数:read.table()      scan()
#read.table()函数读取表格形式的文件. 返回的是一个数据框。
rt<-read.table("birth.data");rt  #注意将文件放到当前R的工作目录
#获取当前R的工作目录,使用 getwd()
#可用函数is.data.frame() 或class()来验证返回的是数据框。
w<-scan("birth.data")   
class(w)  #可见返回w为向量

#2.读Excel表格数据
#间接读取或直接读取。

#间接读取需要将Excel表转换成“文本(制表符分隔)”文件,或者转换成CSV文件。然后调用read.delim()函数读取。
#打开excel表,另存为“文本文件(制表符分隔)”文件;
read.delim("scores.txt") #返回为数据框
#打开excel表,另存为“CSV(逗号分隔)”文件,调用read.csv()函数读取;
read.csv("scores.csv")

# 直接读取excel表格
install.packages("RODBC")
library(RODBC);
#用odbcConnectExcel()函数完成OBDC库与excel表格的连接,再用sqlTables()得到表格信息,命令如下
con<-odbcConnectExcel("scores.csv")  #使用32的R运行
tbls<-sqlTables(con)
#读取Excel表格中数据,
Shq<-sqlFetch(con,tbls$TABLE_NAME[1])
#最后关闭连接,
close(con)

#3.数据集的读取
#R提供了100多个数据集(Datasets),可通过data()函数查看加载这些数据集,
data()     #列出所有基本程序包(base)可用的数据集

#若想加载哪个数据集,括号中加入数据名称即可,
data(infert)

#若想查看或加载其他程序包的数据集,命令为:
data(package="pkname")
data(dataname,package="pkname")
#Pkname为程序包名称,dataname为数据集名称。

#方法2:
library("pkname")
data()
data(dataname)

#写数据文件
# 1.write()函数将数据写入纯文本文件,格式为
# Write(x,file=“data”,ncolumns=if(is.character(x))1 else 5,append=FALSE)

X<-matrix(1:12,ncol=6);X
write(x,file="Xdata.txt")    
#可在文档库中查看生成的Xdata.txt的内容

#2. write.table()函数和write.csv()将数据写入表格形式文本文件或CSV格式的Excel表格。
Df<-data.frame(Name=c("Liu","Wang","Li"),Sex=c("F","M","F"),Age=c(13,12,14),Height=c(56,65,58),Weight=c(84,98,83))
Write.table(df,file="foo.txt")
Write.csv(df,file="foo.csv")
#可在文档库中查看生成的foo.txt和foo.csv的内容

控制流

#控制流
#分支函数 if/else 和 switch

if(any(x<=0))  y<-log(1+x)  else y<-log(x)   

# if /else函数可以嵌套使用:
# if(cond_1) 
#   expr_1
# else If(cond_2) 
# expr_2
# else If(cond_3) 
# expr_3

# Switch函数多用于多分支情况,方法为:
# Switch(expr,list)
# 参数expr为表达式,list为列表。如果expr的取值在1~length(list)之间,则函数返回列表相应位置的值;如果超出范围,则无返回值。

switch(1, 2+3, 2*3, 2/3)      #返回5
switch(4,2+3,2*3,2/3)        #无法返回值

y<-"fruit"
switch(y,fruit="apple",vegetable="broccoli",meat="beef")  #返回”apple”

# 中止  break
# 空语句 next
# 循环函数 for, while, repeat
#   
#   for函数的格式为:
# for(var in seq) expr
# 参数var为循环变量,seq为向量表达式(比如,序列 1:20),expr为一组表达式。

# while函数的格式为:
# while(cond) expr
# 
# repeat函数的格式为:
# repeat expr
# repeat函数靠break跳出循环
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值