r intersect()_30分钟掌握R语言编程基础

R语言是世界上最广泛使用的统计编程语言。本文的目的是使得读者快速上手R语言编程。

4265542aad65add51dacc2c96297b444.png

1 R语言概述

R语言是世界上最广泛使用的统计编程语言。有人认为,它是数据科学家的第一选择(人生苦短,我选Python),并由一个充满活力和有才华的贡献者(包括Hansen老师)社区支持。

R语言综合档案库CRAN(The Comprehensive R Archive Network) 包含了大量开发者贡献的扩展包,截至2020年5月30日,总共有15707个包,涉及统计分析、数值计算、量化投资、金融分析、数据挖掘、机器学习、生物信息学、生物制药、全球地理科学、数据可视化等各个领域。

2013年以来,R包的数量以每月以3.9%的速度快速增长(下图是Hansen老师从CRAN上爬取的最新数据,并用ggplot2绘制)。

bce7dec8a971789c02bd75868130b09b.png

R语言作为一门编程语言是非常容易入门的,但想深入掌握R语言,必须具备基础的数学知识,主要包括初等数学,高等数学,线性代数,概率论,统计学等。

2 环境设置

从R语言官方网址https://cran.r-project.org/ 下载最新版本的R语言解释器。然后下载一个IDE(集成开发环境),R有专门的IDE,即Rstudio,这应该是大家最常用的。微软的Visual Studio,VS code也可以配置R语言编程环境,我自己多年来一直在用Visual Studio。另外 jupter,Pycharm也支持R语言的开发,力推Pycharm,同时支持R与python在一个环境中使用。

3 R对象的类型

尽管R对象有多种类型,但经常使用的是:

  • 向量(vector)

  • 列表(list)

  • 矩阵(matrix)

  • 数组(array)

  • 因子(factor)

  • 数据框(data.frame)

x = pi*10^2 #pi是圆周率class (x) #x的classtypeof (x) #x的type

3.1 标量 scalar

最简单的R数据类型是标量,主要有6种:逻辑型logical(TRUE,FALSE)、数值型numeric(1.22)、整型integer(12)、字符型character("good","bad","叫爸爸")、原型raw(48 65 6c 6c 6f)、复数complex(4i+1)。

最常用的是前四种。

3.2 向量 vector

向量是用于存储数值型、字符型、逻辑型元素的集合,向量是1维的,同一向量中无法混杂不同类型的元素

在R中,向量是R的最基本的数据类型。

向量化计算是R语言特有的一种并行计算方式,即当你对一个向量进行操作时,程序会对向量中每个元素进行分别计算,计算结果以向量的形式返回。向量化计算,在R中有很广泛的应用场景,基本可以取代循环计算,高效的完成计算任务。

使用c()函数将元素组合成向量。

y = c(1,3,7,3,4,2)x = 1:100#把1,2,..., 100个整数向量赋值到xsample(x, 20) #从中随机不放回地抽取20个值作为样本set.seed(0)sample(1:100,20)#先设随机种子再抽样#从1,. . . ,200000中随机不放回地抽取10000个值作为样本:z = sample(1:200000,10000)z[1:10]#方括号中为向量z的下标y = c(1,3,7,3,4,2)z[y] #以y为下标的z的元素值z = sample(x, 100, rep=TRUE) #从有放回地随机抽取100个值作为样本print(z)zl = unique(z)print(zl)length(zl)#z中不同的元素个数xz = setdiff(x,z) #和名之间的不同元素--集合差sort(union(xz, z)) #对xz及z的并的元素从小到大排序setequal(union(xz, z) ,x) #xz及z的并的元素与x是否一样intersect(1:10,7:50) #两个数据的交sample(1:100,20,prob=1:100) #从1:100 中不等概率随机抽样, 各数目抽到的概率与1:100成比例(z=seq(-1, 10, length=100) ) #-1 到 10 等间隔的 100 个数的序列z=seq(-1, 10, len=100) #和上面等价写法(z=seq(10,-1,-0.1)) #10到-1 间隔为-0.1 的序列(x=rep(1:3,3)) #三次重复1:3(x=rep(3:5,1:3)) #自己看,这又是什么呢?x=rep(c(1,10) ,c(4,5))w=c(1,3,x,z) ;w[3]#把数据(包括向量)组合(combine)成一个向量x=rep(0,10);z=1:3;x+z #向量加法(如果长度不同,R如何给出警告和结果x*z #向量乘法rev(x)#颠倒次序z=c("no cat", "has ", "nine", "tails") #字符向量z[1]== "no cat"#双等号为逻辑等式z=1:5z[7]=8;z #什么结果?注:NA为缺失值(not available)z = NULLz[c(1,3,5)]=1:3;z = rnorm(10)[c(2,5)]z[-c(1,3)]#去掉第1、3元素z=sample(1:100,10);zwhich(z==max(z))#给出最大值的下标which.max(z)

与向量有关的函数

函数含义
min(x)最小值
max(x)最大值
which.min(x)显示最小值所在位置
which.max(x)显示最大值所在位置
sum(x)加和
length(x)x的长度
mean(x)均值
median(x)中值
var(x)方差
sd(x)标准差
sqrt(x)平方根
abs(x)取绝对值
unique(x)去冗余
intersect(x)取交集
union(x,y)取并集
setdiff(x,y)差集
setequal(x,y)判断两向量是否相同(对顺序无要求)
identical(x,y)判断两向量是否相同(对顺序有要求)

3.3 列表 list

list可以是任何对象(包括list本身)的集合。

z = list(1:3,m=c(1:2,a=list ("R",letters [1:5]),w="hi!"))z[[1]]z[[2]]z$mz$m$a2z$m[[3]]z$m$w

3.4 矩阵 matrix

矩阵是2维数的,同一矩阵中也无法混杂不同类型的元素

x=matrix(1:20,4,5);x #矩阵的构造x=matrix (1:20,4,5, byrow=TRUE) ;x#矩阵的构造,按行排列t(x) #矩阵转置x=matrix(sample(1:100,20),4,5)2*xx+5y=matrix(sample(1:100,20),5,4)x+t(y)#矩阵之间相加(z=x%*%y) #矩阵乘法zl = solve(z) # solve(a,b)可以解ax=b方程#应该是单位向量,但浮点运算不可能得到干净的0round (zl%*%z, 14) #四舍五入b=solve(z,1:4);b #解联立方程nrow(x) ;ncol(x) ;dim(x)#行列数目x=matrix(rnorm(24),4,6)x[c(2,1),]# 第2和第 1行x[,c(1,3)] #第1 和第3列x[2,1] #第[2,1]元素x[x[,1]>0,1] #第1列大于0的元素sum(x[,1]>0) #第1列大于0的元素的个数sum(x[,1]<=0) #第1列不大于0的元素的个数x[,-c(1,3)]#没有第1、3列的x.diag(x) #x的对角线元素diag(1:5) #以1:5为对角线,其他元素为0的对角线矩阵diag(5) #5维单位矩阵x[-2,-c(1,3)] #没有第2行、第1、3列的xx[x[,1]>0 & x[,3]<= 1,1] #第1列>0并且第3列<2的第1列元素x[x[,2]>0 | x[,1]<0.51,1]#第[列<0.51或者第2列>0的第1列元素x[!x[,2]<0.51,1]#第1列中相应于第2列中>=0.51的元素apply (x, 1, mean) #对行(第一维)求均值apply (x, 2, sum)#对列(第二维)求和x=matrix(norm(24) ,4,6)x[lower.tri(x) ] = 0;  x #得到上三角阵,#为得到下三角阵,用x[upper.tri(x)] = 0

3.5 高维数组 array

矩阵限制为二维,数组可以具有任何数量的维度。

x=array(runif(24),c(4,3,2))x#从24个均匀分布的样本点构造4乘3乘2的三维数组is.matrix(x)dim(x) #得到维数(4,3,2)is.matrix(x [1,,] )#部分三维数组是矩阵x=array(1:24,c(4,3,2))x[c(1,3),,]x=array(1:24,c(4,3,2))apply (x,1, mean)   #可以对部分维做均值运算apply(x,1:2,sum) #可以对部分维做求和运算apply(x,c(1,3), prod) #可以对部分维做求乘积运算

3.6 数据框 Data Frames

数据框也是二维的表格数据对象。与矩阵的不同在于,其每列可以包含不同的数据类型。数据框可以看做是等长度的向量的列表。

install.packages("creditmodel")library(creditmodel)class(UCICreditCard) #UCICreditCard 是credtimodel包默认数据集typeof(UCICreditCard) #UCICreditCard的typestr(UCICreditCard) # 查看UCICreditCard的数据结构names(UCICreditCard) #UCICreditCard数据的变量名字summary (UCICreditCard) #UCICreditCard 的汇总head(UCICreditCard)#UCICreditCard的头几行数据,和UCICreditCard[1:6,]相同tail(UCICreditCard) #UCICreditCard的最后几行数据row.names(UCICreditCard) #行名字

4 数据的输入和输出

r支持各种格式数据文件,如excel\csv\txt\spss\sas\stata\netcdf\hdf5等。但最为方便的还是csv或txt文件,将数据文件放到工作目录直接读取。

第一步:设置工作目录,注意路径要用反斜杠"/"或者双斜杠"\\":

setwd("C:/work")

第二步:使用creditmodel包的read_data函数读取数据

library(creditmodel)#读取一个文件raw_dat = read_data("query-hive-366149.csv", encoding = "UTF-8")#读取多个文件raw_dat_list = read_data(path = getwd(), "query-hive", encoding = "UTF-8")raw_dat_1 = raw_dat_list[1]raw_dat_2 = raw_dat_list[2]

第三步:使用creditmodel包的save_data函数保持数据到工作目录

#保存一个文件save_data(raw_dat)#保存多个文件save_data(raw_dat_1, raw_dat_2 )

未完待续......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值