r intersect()_30分钟掌握R语言编程基础
R语言是世界上最广泛使用的统计编程语言。本文的目的是使得读者快速上手R语言编程。
1 R语言概述
R语言是世界上最广泛使用的统计编程语言。有人认为,它是数据科学家的第一选择(人生苦短,我选Python),并由一个充满活力和有才华的贡献者(包括Hansen老师)社区支持。
R语言综合档案库CRAN(The Comprehensive R Archive Network) 包含了大量开发者贡献的扩展包,截至2020年5月30日,总共有15707个包,涉及统计分析、数值计算、量化投资、金融分析、数据挖掘、机器学习、生物信息学、生物制药、全球地理科学、数据可视化等各个领域。
2013年以来,R包的数量以每月以3.9%的速度快速增长(下图是Hansen老师从CRAN上爬取的最新数据,并用ggplot2
绘制)。
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 )
未完待续......
r intersect()_30分钟掌握R语言编程基础相关推荐
- r语言编程基础_这项免费的统计编程课程仅需2个小时即可学习R编程语言基础知识
r语言编程基础 Learn the R programming language in this course from Barton Poulson of datalab.cc. This is a ...
- 【R语言编程基础】【课后习题答案】【全】
文章目录 第1章 R语言概述 1.选择题 2.操作题 第2章 数据对象与数据读写 1.选择题 2.操作题 第3章 数据集基本处理 1.选择题 2.操作题 第4章 函数与控制流 1.选择题 2.操作题 ...
- Scala语言编程基础
文章目录 Scala语言编程基础 1.实验描述 2.实验环境 3.相关技能 4.知识点 5.实现效果 6.实验步骤 7.总结 Scala语言编程基础 1.实验描述 完成Scala的基本操作,达到对Sc ...
- c语言从键盘输入千米数,第二章 C语言编程基础.ppt
第二章 C语言编程基础 习题2 P51-7.8.13.14.16 2.4.8break 语句和continue语句 [例2.19] 输出100 - 200 之间不能被3整除的数. P44 2.4.9循 ...
- c语言职专试题及答案,中等职业学校计算机应用专业c语言编程基础科试卷及答案.doc...
中等职业学校计算机应用专业c语言编程基础科试卷及答案.doc 中等职业学校计算机应用专业C语言编程基础科试卷及答案一.填空(共35分)1.Unix系统诞生于 年,是由 实验室的K和用汇编语言开发成功的 ...
- C语言对p1口取反,单片机c语言编程基础(5页)-原创力文档
单片机的外部结构: 1. DIP40双列直插: 2. P0,P1,P2,P3四个8位准双向I/O引脚:(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)和地线GND(PIN20): ...
- Linux——Linux C语言编程基础知识
源程序的编译 在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 通常在gcc后跟一些选项和文件名来使用gcc编译器.gcc 命令的基本用法如下:: gcc [option ...
- 嵌入式C语言编程课件,嵌入式系统C语言编程基础PPT课件
<嵌入式系统C语言编程基础PPT课件>由会员分享,可在线阅读,更多相关<嵌入式系统C语言编程基础PPT课件(81页珍藏版)>请在人人文库网上搜索. 1.嵌入式系统C语言编程基础 ...
- 数据库笔记09:Transact-SQL语言编程基础
/********************************* 第九单元 Transact-SQL语言编程基础 ***********************************/ /* ...
最新文章
- 人才招聘丨 清华大学精准医学研究院招聘启事
- 110. Leetcode 714. 买卖股票的最佳时机含手续费 (动态规划-股票交易)
- table control 光标定位控制
- Python中按值来获取指定键的两种方法
- Neo4j:带密码的TF / IDF(和变体)
- [转]用Whois获得电信运营商的IP地址是如何分配的?
- 初识MySQL——人生若如初相逢
- 苹果Mac专业级照片编辑器:RAW Power
- 手把手教你电机FOC控制【二】
- ShowWindow的nCmdShow参数列表
- manchi翻译中文 mi_求这一段意大利文歌词中文翻译(MiManchi)?
- U盘插入后只显示安全删除硬件问题
- 独家 | 想成为一名数据科学家?你得先读读这篇文章
- DCloud之Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略控制
- 设置vs工程中的宏参数
- iOS-通俗易懂的微信支付接入和爬坑指南,十分钟轻松搞完
- 陕西临潼姜寨遗址(蛙的演化)
- 走出abstract class与interface的困惑
- 分享某程序员裸辞全职在家的接单感受
- 石溪计算机学校校服,美国纽约州著名高中推荐盘点,总有你想去的!
热门文章
- CNN 模型框架(转)
- PS:oracle恢复删除的数据
- java中输入方式Scanner和BufferedReader
- 4.9.5 通用注释
- Linux下安装配置 Jdk1.6+Tomcat5.5
- 打开IE窗口自动最大化效果
- ue4 后期处理景深_珠宝摄影教程——后期修图景深合成(如何完全把珠宝全部拍清晰)...
- 在VS2013以及Linux系统中利用SVN自动更新版本号
- HTML注释的表示方法,如何表示HTML注释
- Win-MASM64汇编语言-LOOP指令