R---第一章__基础(自用)

向量

(x<-c(10,11,14,15))  #外面带个括号就可以直接执行了
(x<-1:10)
(x<-seq(5,by=2,length=4))  #从5开始,等差是2,长度是4
(y<-seq(10,by=3,along.with=x))  #长度由x决定

(y1<-rep(x,times=3))  #repeat x作为模版,重复三次
(y2<-rep(x,each=3))  #x作为模版,每一个元素都重复三次
(y3<-rep(x,each=2,times=3))  #each 和 times 好像没有先后顺序 先每个元素复制两边,再整体重复3次
(y4<-rep(x,times=2,each=3))  #先每个元素复制三遍,再整体重复2次
(y5<-rep(x,times=2,each=3,length=15)) #多了个限制长度=15

(y6<-vector(mode="logical",length=4))

(y1[-1:-5])  #去掉y1中第一个到第五个元素  也可以y1[-5:-1]  负号就是删除了
(which(y1<10))  #输出的是下标
(y1[which(y1<10)])  #注意用的是[],外面多个y1就输出的是值了,如果要取里面的值用的都是[]

length(y1) #查看长度
mode(y1) #查看y1每个元素的数据类型  然后y1是numeric
class(y1) #查看y1整体的数据类型  然后y1还是numeric

生成向量:

x<-c(x1,x2,....)       常用

里面的rep(重复的)和seq(....)感觉没什么用

y6就默认生成的FALSE

取其中的数据用的是[]中括号

mode看内部每个元素的类型,class看整体的类型,str()也是可以看类型的详细一点

因子


(x<-factor(c('a','a','b','ab','o')))  #按字母顺序排等级levels
unclass(x)  #用来查看因子变量的数值
(x1<-factor(c('a','a','b','ab','o'),levels=c('o','a','b','ab')))
(x2<-gl(4,3,labels=c('red','yellow','blue','green'))) #4个级别,重复三次,labels里面是等级顺序
mode(x2);class(x2)

factor形成因子,里面可以加levels=c(),自己定义因子的等级,默认就是按字母顺序

factor里面加的是c()

gl()函数感觉用处也不大

unclass(x)用来查看因子里面对应的等级,输出的数

其中的转换

(x<-c(1,TRUE,'wode'))   #1和TRUE自动转化为了字符串,安全程度:字符串>数字>布尔类型  这些是隐式转换
mode(x);class(x) #都是character
x2<-1:4
(y<-as.character(x2))     #还可以显式转换

当用c来定义向量的时候,如果里面的参数的类型不一样,会自动转换

as.character(x)        显性转换参数类型

矩阵

生成矩阵

#方法1
(y<-matrix(1:18,nrow=6,ncol=3))  #默认的是按列竖着排序
(y<-matrix(1:18,nrow=6,ncol=3,byrow=T))  #True  就改成了按行来排序生成数字了  row行  col列
(y<-matrix(1:18,nrow=6,ncol=3,byrow=F))
c<-matrix(1:16,8)  #还可以这样,究极省略,一个数8就默认是行(先行后列)
#方法2
(x<-1:18)
dim(x)<-c(3,6);x #就先生成一堆数,再按3*6的维度来摆放
#方法3
(x<-1:10)
(y<-11:20)
(z<-21:30)
(m1<-rbind(x,y,z)) #按行组装
(m2<-cbind(x,y,z))  #按列组装
mode(m1);class(m2)

提取矩阵中的元素

这些提取都是  [  ]  中括号的   以及给其中的列行取名字

#提取矩阵中的元素
(y<-matrix(1:18,nrow=6,ncol=3)) 
y[2,3]   #注意是中括号
y[2,]
y[,c(1,3)]     #所有行,1,3列的
y[c(1,3),c(1,3)]
#给行列名字取名字
colnames(y)<-c("列1",'列2','列3')
rownames(y)<-c('行1','行2','行3','行4','行5','行6')   #就好像不可以中文,会乱码
colnames(y)<-c("l1",'l2','l3');rownames(y)<-c('h1','h2','h3','h4','h5','h6')
y['h1','l2']   #记得加双引号

y[2,3]<-NA  #将y的2,3元素变为缺失值
is.na(y)
y[is.na(y)]=0    #把缺失值赋予0

矩阵的运算

m1<-matrix(1:12,nrow=3)
m2<-matrix(13:24,ncol=4)
m1;m2
m1+10 #m1每个元素+10
m1+m2 #m1和m2各个对应的元素相加
m1*10 #每个元素*10
m1*m2 #对应元素相乘
m1%*%t(m2) #矩阵的乘法,行列相乘,前列=后行所以t(m2)要先转置

对角阵

diag(4)    #4阶单位阵
diag(c(1,2,5,8))   #对角上的元素是1258
a<-matrix(1:16,nrow=4)
diag(a)  #如果是diag一个方阵,返回的就是对角上的元素了
b=solve(a)

a<-matrix(rnorm(16,10,2),4,4)     #rnorm里面是随机生成数符合正态分布
b<-solve(a)  #sovle是求逆
a%*%b
c<-1:4
solve(a,c)   #线性方程组求解x1x2x3x4  

数据框

数据框的生成:data.frame()就里面可以加列的名字,

里面有rnorm和runif函数:就都是随机生成的函数

runif(n,min,max)

rnorm(n,mean=30,sd=1) n个,平均值是mean,方差是1,默认mean=0,sd=1

通过attach(数据框名字)detach(数据框名字)来省略

当然了还能用with()

with()不太会用

within()好点

within(数据框名, {修改1;修改2;修改3;......})或者within(数据框名,{修改1

修改2

修改3})

search()   用来查看当前的环境,检查,会不会还在某个数据框的attach里面

(a<-data.frame(fx=rnorm(10,10,2),fy=runif(10,10,20),fmonth=1:10))    
#自己生成一个数据框,rnormhe runif都是随机生成


a[3,2]
a[3,]   #提取里面的元素,跟矩阵一样的

y1<-a[1];y2<-a[[1]] #前面这个一个[]的就按列显示了,后面这个2个[]的就按行展示了,
#前面这个返回的是数据框的第一列,按数据框的格式返回了
mode(y1);class(y1);mode(y2);class(y2)   #但前面这个是列的数据框了,后面这个就是向量了
y1<-a['fx'];y2<-a[['fx']]  #也可以按列名来操作

y3<-a$fx    #就是fx限定到了a里面,但如果每次就要打这个就没麻烦,就可以用下面的attach detach和with函数

attach(a)  #attach 限定到了a里面,detach是解除,可以用search来查看当前的环境
#如果连续执行了三次attach(a)就需要三次detach(a)来解除
fx
detach(a)
search()

with (a,{
  fx=rnorm(10,10,20)
})   #打括号相当于构造了一个搜索路径,对象是a
#但是好像这段没有赋值,fx=norm没什么用

a<-within(a,{
  fx=1:10
  abc=2:11
})  #就往a里面多加了一个abc列,而且a里面的fx列也改成了这个

a$fz<-a$fx+a$fy  # 这也是向a里面多加一列的方法

a<-transform(a,fq=a$fx+a$fy) #也是加一列 或者修改原有的一列的元素

edit(a) # 去修改矩阵a里面的元素  但是只是编辑 保存的话还有再来个b
b=edit(a)
fix(a)  #但是用fix修改编辑了之后就可以从保存了

列表

可以是向量、矩阵、数据框、其他列表的组合

a<-list(x=1:10,y=matrix(1:16,4),z=data.frame())   #然后出来三块两层的第一层就是该块的名字:$名字
names(a)     #就看里面块的名字
c=a[1]   #就是取a里面的第一块 但这个取得有$x的名字的
c=a[[1]]   #这个取得就没$x的名字,是向量的形式
mode(a);class(a)

数组:用得少。略

array

判断类型

is.list(a)  #看他返回TRUE还是FALSE
is.data.frame(a)
a<-matrix(1:20,4)
mode(a)    #显示的是里面的元素是什么类型就数啊字符串什么的应该
class(a)    #但感觉还是直接class看类型 ,就矩阵既可以是矩阵也可以是数组
str(a)

补充

a<-list(x=1:10,y=matrix(1:16,4),z=data.frame()) 
str(a)  #还有就可以用str来看    这是structure的缩写 不是字符串
# $ x: int [1:10] 1 2 3 4 5 6 7 8 9 10
# $ y: int [1:4, 1:4] 1 2 3 4 5 6 7 8 9 10 ...
# $ z:'data.frame':        0 obs. of  0 variables
#然后显示了上面这三行,第一行int后面就这样[1:10]一组  就向量, 第二行 有两组[1:4]就是矩阵

一些语句

#①
if(condition){
  ...
}else{
  ...
}
#②
x<-1:10
y<-ifelse(x%%2==0,'A','B') #%%是取余数 如果=0就出A,反之出B

#循环结构
#③
for (x in 1:5) {
  print(x^2)
}

#④
i=1
repeat{
  print(i^2)
  i=i+1
  if (i>5)  break
}

#⑤
i=1
while(i<6){
  print(i^2)
  i=i+1
}

函数

myadd=function(a,b,c){
  return(a+b+c)
}
f=myadd(1,3,2)
f
#还有就是在其他的.R文件中引用这里的Function
#就要用source('/Users/chenyipeng/desktop/第一章--向量.R')

向量化计算和apply家族

x<-data.frame(pv=rnorm(100,20,3),
              uv=rnorm(100,40,4),
              ip=runif(100,40,50))
apply(x,MARGIN = 2,mean)   #这个margin是看行(1)的维度还是列(2)的维度
apply(x,MARGIN = 2,quantile,probs=c(0.1,0.5,0.9))  #quantile分位数,后面要有probs跟着 分位的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值