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语言编程基础相关推荐

  1. r语言编程基础_这项免费的统计编程课程仅需2个小时即可学习R编程语言基础知识

    r语言编程基础 Learn the R programming language in this course from Barton Poulson of datalab.cc. This is a ...

  2. 【R语言编程基础】【课后习题答案】【全】

    文章目录 第1章 R语言概述 1.选择题 2.操作题 第2章 数据对象与数据读写 1.选择题 2.操作题 第3章 数据集基本处理 1.选择题 2.操作题 第4章 函数与控制流 1.选择题 2.操作题 ...

  3. Scala语言编程基础

    文章目录 Scala语言编程基础 1.实验描述 2.实验环境 3.相关技能 4.知识点 5.实现效果 6.实验步骤 7.总结 Scala语言编程基础 1.实验描述 完成Scala的基本操作,达到对Sc ...

  4. c语言从键盘输入千米数,第二章 C语言编程基础.ppt

    第二章 C语言编程基础 习题2 P51-7.8.13.14.16 2.4.8break 语句和continue语句 [例2.19] 输出100 - 200 之间不能被3整除的数. P44 2.4.9循 ...

  5. c语言职专试题及答案,中等职业学校计算机应用专业c语言编程基础科试卷及答案.doc...

    中等职业学校计算机应用专业c语言编程基础科试卷及答案.doc 中等职业学校计算机应用专业C语言编程基础科试卷及答案一.填空(共35分)1.Unix系统诞生于 年,是由 实验室的K和用汇编语言开发成功的 ...

  6. C语言对p1口取反,单片机c语言编程基础(5页)-原创力文档

    单片机的外部结构: 1. DIP40双列直插: 2. P0,P1,P2,P3四个8位准双向I/O引脚:(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)和地线GND(PIN20): ...

  7. Linux——Linux C语言编程基础知识

    源程序的编译 在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 通常在gcc后跟一些选项和文件名来使用gcc编译器.gcc 命令的基本用法如下:: gcc [option ...

  8. 嵌入式C语言编程课件,嵌入式系统C语言编程基础PPT课件

    <嵌入式系统C语言编程基础PPT课件>由会员分享,可在线阅读,更多相关<嵌入式系统C语言编程基础PPT课件(81页珍藏版)>请在人人文库网上搜索. 1.嵌入式系统C语言编程基础 ...

  9. 数据库笔记09:Transact-SQL语言编程基础

    /*********************************  第九单元 Transact-SQL语言编程基础 ***********************************/ /* ...

最新文章

  1. 人才招聘丨 清华大学精准医学研究院招聘启事
  2. 110. Leetcode 714. 买卖股票的最佳时机含手续费 (动态规划-股票交易)
  3. table control 光标定位控制
  4. Python中按值来获取指定键的两种方法
  5. Neo4j:带密码的TF / IDF(和变体)
  6. [转]用Whois获得电信运营商的IP地址是如何分配的?
  7. 初识MySQL——人生若如初相逢
  8. 苹果Mac专业级照片编辑器:RAW Power
  9. 手把手教你电机FOC控制【二】
  10. ShowWindow的nCmdShow参数列表
  11. manchi翻译中文 mi_求这一段意大利文歌词中文翻译(MiManchi)?
  12. U盘插入后只显示安全删除硬件问题
  13. 独家 | 想成为一名数据科学家?你得先读读这篇文章
  14. DCloud之Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略控制
  15. 设置vs工程中的宏参数
  16. iOS-通俗易懂的微信支付接入和爬坑指南,十分钟轻松搞完
  17. 陕西临潼姜寨遗址(蛙的演化)
  18. 走出abstract class与interface的困惑
  19. 分享某程序员裸辞全职在家的接单感受
  20. 石溪计算机学校校服,美国纽约州著名高中推荐盘点,总有你想去的!

热门文章

  1. CNN 模型框架(转)
  2. PS:oracle恢复删除的数据
  3. java中输入方式Scanner和BufferedReader
  4. 4.9.5 通用注释
  5. Linux下安装配置 Jdk1.6+Tomcat5.5
  6. 打开IE窗口自动最大化效果
  7. ue4 后期处理景深_珠宝摄影教程——后期修图景深合成(如何完全把珠宝全部拍清晰)...
  8. 在VS2013以及Linux系统中利用SVN自动更新版本号
  9. HTML注释的表示方法,如何表示HTML注释
  10. Win-MASM64汇编语言-LOOP指令