R语言基础入门(6)之向量下标和子集

目录

1.正整数下标

2.负整数下标

3.空下标与零下标

4.下标超界

5.逻辑下标

6. which()、which.min()、which.max() 函数

7. 元素名

8.用 R 向量下标作映射

9.集合运算

练习 


1.正整数下标

首先定义一个x,然后对向量 x, 在后面加方括号和下标可以访问向量的元素和子集,如:

 定义一个x:

x <- c(1, 4, 6.25)
x

返回:

我们取出第二个元素:

x[2]

返回:

我们再修改第二个元素为 99 :

x[2] <- 99; x

返回:

我们再取下第 13 号元素 :

x[c(1,3)]

返回:

我们再修改第 13 号元素为 11,13 :

x[c(1,3)] <- c(11, 13); x

返回:

         若是下标可重复,又会如何,如:

x[c(1,3,1)]

返回:

2.负整数下标

负下标表示扣除相应的元素后的子集,如

x <- c(1,4,6.25)
x[-2]

-2 表示倒数第二个;返回:

再比如:

x[-c(1,3)]

返回:

负整数下标不能与正整数下标同时用来从某一向量中取子集,比如

x[c(1,-2)]

返回结果会报错:

3.空下标与零下标

x[] 表示取 x 的全部元素作为子集。这与 x 本身不同,比如
x <- c(1,4,6.25)
x[]

返回:

然后,我们对x 内的值进行修改

x[] <- 999
x

返回:

再如,另一种对x内的值进行修改

x <- c(1,4,6.25)
x <- 999
x

返回结果只有一个值:

 可能有人会问是否有 x[0] ,那就让我们看看

x[0]

返回:

那说明,x[0] 是一种少见的做法,结果返回类型相同、长度为零的向量,如 numeric(0)

相当于空集;且 0 与正整数下标一起使用时会被忽略。当 0 与负整数下标一起使用时也会被
忽略。

4.下标超界

设向量 x 长度为 n, 则使用正整数下标时下标应在 {1, 2, . . . , n} 中取值。
x <- c(1,4,6.25)
x[2]

返回:

 

如果使用大于 n 的下标,读取时返回缺失值,并不出错。
x[5]

返回:

超出 n 的下标元素赋值,则向量自动变长,中间没有赋值的元素为缺失值。例如
x[5] <- 9 
x

返回:

虽然 R 的语法对下标超界不视作错误,但是这样的做法往往来自不良的程序思路,而且对程序效率有影响,所以实际编程中应避免下标超界

5.逻辑下标

下标可以是与向量等长的逻辑表达式,一般是关于本向量或者与本向量等长的其它向量的比较结果,如
定义x
x <- c(1,4,6.25)
取出 x 的大于 3 的元素组成的子集
x[x > 3]

返回:

逻辑下标除了用来对向量取子集,还经常用来对数据框取取子集,也用在向量化的运算中。例如,对如下示性函数

输入向量 x,结果 y 需要也是一个向量,程序可以写成

 

f <- function(x){
y <- numeric(length(x))
y[x >= 0] <- 1
y[x < 0] <- 0 # 此语句多余
y }
事实上还有一种写法,向量化的逻辑选择有一个 ifelse() 函数,比如,对上面的示性函数,如果 x 是一个向量,输出 y 向量可以写成 
y <- ifelse(x>=0, 1, 0)
要注意的是,如果逻辑下标中有缺失值,对应结果也是缺失值,如
x <- c(1, 4, 6.25, NA)
x[x > 2]

返回:

 

所以,在用逻辑下标作子集选择时,一定要考虑到缺失值问题。
正确的做法是加上!is.na 前提,如
x[!is.na(x) & x > 2]

返回:

6. which()which.min()which.max() 函数

函数 which() 可以用来找到满足条件的下标,如
x <- c(3, 4, 3, 5, 7, 5, 9)
which(x > 5)

返回:

seq(along=x) 会生成由 x 的下标组成的向量,如

seq(along=x)[x > 5]

返回:

which.min()which.max() 求最小值的下标和最大值的下标,不唯一时只取第一个。如
which.min(x)
which.max(x)

返回:

7. 元素名

向量可以为每个元素命名。如
ages <- c(" 李明"=30, " 张聪"=25, " 刘颖"=28)

ages <- c(30, 25, 28)
names(ages) <- c(" 李明", " 张聪", " 刘颖")

ages <- setNames(c(30, 25, 28), c(" 李明", " 张聪", " 刘颖"))
这时可以用元素名或元素名向量作为向量的下标,如
ages[" 张聪"]

返回:

 再如:

ages[c(" 李明", " 刘颖")]

返回:

再如,修改字符串数值:

ages[" 张聪"] <- 26
用字符串作为下标时,如果该字符串不在向量的元素名中,读取时返回缺失值结果,赋值时该向量会增加一个元素并以该字符串为元素名。
带有元素名的向量也可以是字符型或其它基本类型,如
sex <- c(" 李明"=" 男", " 张聪"=" 男", " 刘颖"=" 女")
除了给向量元素命名外,在矩阵和数据框中还可以给行、列命名,这会使得程序的扩展更为容易和安全。
R 允许仅给部分元素命名,这时其它元素名字为空字符串。不同元素的元素名一般应该是不同的,否则在使用元素作为下标时会发生误读,但是 R 语法允许存在重名。
unname(x) 返回去掉了元素名的 x 的副本,用 names(x) <- NULL 可以去掉 x 的元素名。

8.R 向量下标作映射

R 在使用整数作为向量下标时,允许使用重复下标,这样可以把数组 x 看成一个 1 : n 的整数到 x[1], x[2], . . ., x[n] 的一个映射表, 其中 n x 的长度。
比如,某商店有三种礼品,编号为 1,2,3,价格分别为 68, 88 168。令
price.map <- c(68, 88, 168)
设某个收银员在一天内分别售出礼品编号为 3,2,1,1,2,2,3,可以用如下的映射方式获得售出的这些礼品对应的价格:
items <- c(3,2,1,1,2,2,3)
y <- price.map[items]
print(y)

返回:

R 向量可以用字符型向量作下标,字符型下标也允许重复,所以可以把带有元素名的 R 向量看成是元素名到元素值的映射表
比如,设 sex 10 个学生的性别(男、女)
sex <- c(" 男", " 男", " 女", " 女", " 男", " 女", " 女", " 女", " 女", " 男")
希望把每个学生按照性别分别对应到蓝色和红色。首先建立一个 R 向量当作映射
sex.color <- c(' 男'='blue', ' 女'='red')
R 向量 sex.color 当作映射,可以获得每个学生对应的颜色
cols <- sex.color[sex]; print(cols)

返回:

这样的映射结果中带有不必要的元素名,用 unname() 函数可以去掉元素名,如
unname(cols)

返回:

9.集合运算

可以把向量 x 看成一个集合,但是其中的元素允许有重复。用 unique(x) 可以获得 x 所有不同值。如
unique(c(1, 5, 2, 5))

返回:

 a %in% x 判断 a 的每个元素是否属于向量 x,如

5 %in% c(1,5,2)

返回:

c(5,6) %in% c(1,5,2)

返回

%in 运算符类似,函数 match(x, table) 对向量 x 的每个元素,从向量 table 中查找其首次出现位置并返回这些位置。没有匹配到的元素位置返回NA_integer_(整数型缺失值)。如

 一个数值判断:

match(5, c(1,5,2))

返回:

若所匹配集合有重复元素,则返回为第一个元素的下标:

match(5, c(1,5,2,5))

返回:

 若匹配两个元素的所属呢?

match(c(2,5), c(1,5,2,5))

返回:

 若所匹配元素中,有集合中没有的呢?则返回空值,如

match(c(2,5,0), c(1,5,2,5))

返回:

 intersect(x,y) 交集,结果中不含重复元素,如

intersect(c(5, 7), c(1, 5, 2, 5))

返回:

union(x,y) 并集,结果中不含重复元素,如
union(c(5, 7), c(1, 5, 2, 5))
返回:
 
setdiff(x,y) 差集,即 x 的元素中不属于 y 的元素组成的集合,结果中不含重复元素,如
setdiff(c(5, 7), c(1, 5, 2, 5))

 返回:

 setequal(x,y) 判断两个集合是否相等,不受次序与重复元素的影响,如

setequal(c(1,5,2), c(2,5,1))

 再如

setequal(c(1,5,2), c(2,5,1,5))

返回:

练习 

设文件class.csv内容如下:
name,sex,age,height,weight
Alice,F,13,56.5,84
Becka,F,13,65.3,98
Gail,F,14,64.3,90
Karen,F,12,56.3,77
Kathy,F,12,59.8,84.5
Mary,F,15,66.5,112
Sandy,F,11,51.3,50.5
Sharon,F,15,62.5,112.5
Tammy,F,14,62.8,102.5
Alfred,M,14,69,112.5
Duke,M,14,63.5,102.5
Guido,M,15,67,133
James,M,12,57.3,83
Jeffrey,M,13,62.5,84
John,M,12,59,99.5
Philip,M,16,72,150
Robert,M,12,64.8,128
Thomas,M,11,57.5,85
William,M,15,66.5,112
用如下程序可以把上述文件读入为 R 数据框 d.class, 并取出其中的 name
age 列到变量 name age 中:
d.class <- read.csv('class.csv', header=TRUE, stringsAsFactors=FALSE)
name <- d.class[,'name']
age <- d.class[,'age']
(1) 求出 age 中第 3, 5, 7 号的值;
(2) 用变量 age, 求出达到 15 岁及以上的那些值;
(3) 用变量 name age, 求出 Mary James 的年龄。
(4) age Mary James 这两人之外的那些人的年龄值,保存到变量 age1 中。
(5) 假设向量 x 长度为 n, 其元素是 {1, 2, . . . , n} 的一个重排。可以把 x 看成一个 i x[i] 的映射 (i{1, 2, . . . , n} 中取值)。求向量 y, 保存了上述映射的逆映射,即:如果 x[i]=j, y[j]=i

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言随机数的生成

在编程中&#xff0c;我们经常需要生成随机数&#xff0c;例如&#xff0c;贪吃蛇游戏中在随机的位置出现食物&#xff0c;扑克牌游戏中随机发牌等。 在C语言中&#xff0c;我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随机数&#xff0c;它的用法为&#xff…

R语言基础入门(7)之数据类型的性质

目录 1.存储模式与基本类型 2.类属 3.类型转换 4.属性 5.str() 函数 6.关于赋值 1.存储模式与基本类型 R语言中根据类型可以将数据划分为&#xff1a; 数值型&#xff08;numeric&#xff09;整数型&#xff08;integer&#xff09;字符型&#xff08;character&#xff09…

C++班级通讯录

C实现班级通讯录管理系统 设计流程 本系统基于C实现班级通讯录管理系统。功能包括增、删、查、改等。通讯录包括的个人信息有姓名、学号、性别、籍贯、政治面貌、手机号、QQ号、宿舍等。主要用到了指针、结构体、遍历链表、文件读取等知识点。 优点 1 . 此系统含有欢迎使用的…

两万字教会你解析库之Beautiful Soup

目录 1.简介 2.准备工作 3.解析器 4.基本用法 5.节点选择器 5.1选择元素 5.2提取信息 5.3嵌套选择 5.4关联选择 6.方法选择器 7. css 选择器 7.1 嵌套选择 7.2 获取属性 7.3 获取文本 总结 1.简介 简单来说&#xff0c;Beautiful Soup就是Python的一个HTML或XM…

C语言实现随机抽取纸牌

程序设计要求 本程序负责发一副标准纸牌&#xff0c;每张标准纸牌都有一种花色&#xff08;梅花、方块、黑桃、红桃&#xff09;和一个等级&#xff08;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6…K,A&#xff09;。程序需要用户指明手机有几张牌。 程序设计流…

R语言基础入门(8)之日期时间

目录 1.日期和日期时间类型 2.从字符串生成日期数据 3.日期显示格式 4.访问日期时间的组成值 5.日期舍入计算 6.日期计算 6.1 时间长度 6.2 时间周期 6.3 时间区间 7.基本 R 软件的日期功能 7.1 生成日期和日期时间型数据 7.2 取出日期时间的组成值 7.3 日期计算 练…

C语言点名器

设计流程 1 . 使用求模符号“%”求模数控制随机数产生范围。 2 . 使用rand&#xff08;&#xff09;计算出一个随机数。 3 . 使用函数time()来获取时间。 4 . 用二维字符数组储存名字&#xff0c;产生范围类的随机数在用下标调用数组里面的名字。 效果展示 完整代码 #inclu…

R语言基础入门(9)之因子类型

目录 1.因子 2.table() 函数 3.tapply() 函数 4.forcats 包的因子函数 练习 1.因子 R 中用因子代表数据中分类变量, 如性别、省份、职业。有序因子代表有序量度&#xff0c;如打分结果&#xff0c;疾病严重程度等。用 factor() 函数把字符型向量转换成因子&#xff0c;如x…

2万字带你攻略掉Selenium

目录 1. 准备工作 1.1 安装selenium库 1.2 安装浏览器驱动 2. 基本用法 2.1 初始化浏览器对象 2.2 访问页面 2.3 设置浏览器大小 2.4 刷新页面 2.5 前进后退 3. 获取页面基础属性 4. 定位页面元素 4.1 id定位 4.2 name定位 4.3 class定位 4.4 tag定位 4.5 lin…

IDEA里的web.xml页面的Servlet名称报错下方出现红色下划线

错误显示 对于上述错误是因为只有新建的Servlet名称但是并没为为这个Servlet指定访问地址的路径和映射&#xff0c;我们只需要添加访问地址的路径和映射就可以解决这个问题了。 修改之后的代码 <?xml version"1.0" encoding"UTF-8"?> <web-ap…

Python之Hello World

python实现Hello World项目 在项目上点击右键New–>File,然后输入文件名Hello World 一个Hello World文件创建完成 编写相应的代码 在空白的地方右击选择Run"Hello World" 程序运行成功&#xff0c;输出Hello World

knn(k近邻算法)——python

目录 1. 基本定义 2. 算法原理 2.1 算法优缺点 2.2 算法参数 2.3 变种 3.算法中的距离公式 4.案例实现 4.1 导入相关库 4.2 读取数据 4.3 读取变量名 4.4 定义X,Y数据 4.5 分离训练集和测试集 4.6 计算欧式距离 4.7 可视化距离矩阵 4.8 预测样本 4.9 查看正确…

C语言中的文件是什么?

我们对文件的概念已经非常熟悉了&#xff0c;比如常见的 Word 文档、txt 文件、源文件等。文件是数据源的一种&#xff0c;最主要的作用是保存数据。 在操作系统中&#xff0c;为了统一对各种硬件的操作&#xff0c;简化接口&#xff0c;不同的硬件设备也都被看成一个文件。对…

knn(k近邻算法)——matlab

目录 1. 基本定义 2. 算法原理 2.1 算法优缺点 2.2 算法参数 2.3 变种 3.算法中的距离公式 4.案例实现 4.1 读取数据 4.2 分离训练集和测试集 4.3 归一化处理 4.4 计算欧氏距离 4.5 排序和输出测试结果 4.6 计算准确率 总代码 1. 基本定义 k最近邻(k-Nearest N…

C语言打开文件详解

C语言中操作文件之前必须先打开文件&#xff1b;所谓“打开文件”&#xff0c;就是让程序和文件建立连接的过程。 打开文件之后&#xff0c;程序可以得到文件的相关信息&#xff0c;例如大小、类型、权限、创建者、更新时间等。在后续读写文件的过程中&#xff0c;程序还可以记…

python turtle虎年来拜年了

1.画个虎 # codingutf-8 from turtle import * import timeCOLOR #B2814Ddef set_start(x, y, w, cCOLOR):penup()setx(x)sety(y)setheading(towards(0, 0))width(w)pencolor(c)pendown()speed(0)def left_rotate(time, angle, length):for i in range(time):left(angle)forwa…

TOPSIS法 —— matlab

目录 1.TOPSIS法介绍 2. 计算步骤 &#xff08;1&#xff09;数据标准化 &#xff08;2&#xff09;得到加权后的矩阵 &#xff08;3&#xff09;确定正理想解和负理想解 &#xff08;4&#xff09;计算各方案到正&#xff08;负&#xff09;理想解的距离 &#xff08;…

TOPSIS法 —— python

目录 1.TOPSIS法介绍 2. 计算步骤 &#xff08;1&#xff09;数据标准化 &#xff08;2&#xff09;得到加权后的矩阵 &#xff08;3&#xff09;确定正理想解和负理想解 &#xff08;4&#xff09;计算各方案到正&#xff08;负&#xff09;理想解的距离 &#xff08;…

C语言随机读写文件

实现随机读写的关键是要按要求移动位置指针&#xff0c;这称为文件的定位。 文件定位函数rewind和fseek 移动文件内部位置指针的函数主要有两个&#xff0c;即 rewind() 和 fseek()。 rewind() 用来将位置指针移动到文件开头&#xff0c;前面已经多次使用过&#xff0c;它的…

mysql-installer安装教程(详细图文)

目录 1.安装 2.配置系统环境变量 3.配置初始化my.ini文件 4.MySQL彻底删除 5.Navicat 安装 1.安装 先去官网下载需要的msi&#xff0c;在这放出官网下载地址下载地址 这里我具体以8.0.28 为安装例子&#xff0c;除了最新版安装界面有些变动以往的都是差不多的。 过去的版本…