R语言中取向量子集

在R中,想要给向量取子集,就是在向量的后面加上\[\]符号。通过在\[\]符号里填写数据来控制取向量的哪部分子集。

一般\[\]符号里可以有四种类型的内容:

第一种:整数型向量

这些向量要么全是正值,要么全是负值,要么是0。你不能有正有负。

这个整数就标记了需要取值的位置。

正值

比如:

r 复制代码
x <- c("a","b","c","d")
x[c(3,2,1)]
[1] "c" "b" "a"

你瞧,通过c(3,2,1)这个向量,我就取出了x这个向量中的第3位,第2位,第1位。

不仅如此,这些位置还是可以重复的。

负值

当给了一个负数向量,这不代表是倒着取值,而是把这些值去掉。

比如:

r 复制代码
x[c(-3,-2,-1)]
[1] "d"

第二种:字符型向量

如果你的向量的值都是有名字的,那可以把它们的名字组成一个向量进行取值。

r 复制代码
x <- c("one"=1,"two"=2,"three"=3)
x[c("one","two")]
one two 
  1   2 

第三种:空值

如果\[\]里面啥也没有,这代表取全部的向量值。从这个角度看,这个用法没啥用。

比如:

r 复制代码
> x <- c("one"=1,"two"=2,"three"=3)
> x[]
one   two three 
  1     2     3 
> x
one   two three 
  1     2     3 

瞧,x和x\[\]没区别。

但是,在多维的向量中,这个功能就很常用,它能让我们取某n行所有列,或某n列所有行。

比如我们建立一个五行三列的数据框。

r 复制代码
x <- data.frame(col1=c(1,2,3,4,5),col2=c("a","b","c","d","e"),col3=c("one","two","three","four","five"))

在构建过程中,我们知道,这个数据框是由三个等长的向量组成的。每个向量代表数据框的一个列。

那如果我们想取这个数据框的第一行所有列,你会怎么取呢?

r 复制代码
> x[1,1:3]
  col1 col2 col3
1    1    a  one

在以上的方式中我们通过1:3来限定列的范围是第一列到第三列。但这样很麻烦,更简单的方法是:

r 复制代码
> x[1,]
  col1 col2 col3
1    1    a  one

同理,如果你就不想要第三列。你想要所有行。那你可以这样写:

r 复制代码
> x[,-3]
  col1 col2
1    1    a
2    2    b
3    3    c
4    4    d
5    5    e

第四种:逻辑值

在取一个向量的子集时,我们会在\[\]中放上与向量等长的一个逻辑向量,结果会把对应为TRUE的子集取出来。

比如:

r 复制代码
> x <- c("a","b","c","d","e")
> x[c(TRUE,FALSE,TRUE,FALSE,TRUE)]
[1] "a" "c" "e"

因为这个,我们常在\[\]放一些比较操作:

r 复制代码
> x <- c(1,2,3,4,5)
> x[x>3]
[1] 4 5

大家要理解这个操作,一定要知道R语言是按照向量来操作的。当你说x>3时,是用x的每一个元素和3来比较,最后返回一个逻辑值向量。

r 复制代码
> x>3
[1] FALSE FALSE FALSE  TRUE  TRUE
相关推荐
梦想的初衷~9 小时前
MaxEnt物种分布建模完整教程|理论基础、数据获取、R清洗优化与论文制图全流程
r语言·生态遥感·物种分布模拟·maxent建模·r语言数据分析·arcgis实操·科研建模
Omics Pro4 天前
~30,000+引用!理论2005,R包2008,多组学集成AI增强
开发语言·数据库·人工智能·算法·机器学习·自然语言处理·r语言
天桥下的卖艺者6 天前
chrals.CTI函数升级版发布,增加了CTI衍生的脂肪指数提取
数据库·r语言
小师兄吃牛肉7 天前
什么是R语言?如何快速学习R语言
开发语言·学习·r语言
喆星时瑜8 天前
Win10/11 安装 R 与 RStudio 详细图文教程
开发语言·r语言·安装
喆星时瑜8 天前
R语言基础语法入门
开发语言·r语言
喆星时瑜8 天前
R语言向量语法的详细教程
开发语言·r语言
临床数据科学和人工智能兴趣组11 天前
在R语言中, 使用 as.factor() 函数转换数值型变量
开发语言·r语言
babe小鑫20 天前
信息与计算科学专业应届生面试 怎么证明自己能解决业务问题
学习·r语言·excel
深兰科技21 天前
深兰科技受邀参与第二届中国(南宁)—东盟人工智能场景应用对接会,深化AI国际合作
人工智能·qt·r语言·scala·symfony·智能机器人·深兰科技