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
相关推荐
图灵信徒1 天前
R语言绘图与可视化第六章总结
python·数据挖掘·数据分析·r语言
Tiger Z3 天前
《R for Data Science (2e)》免费中文翻译 (第12章) --- Logical vectors(1)
数据分析·r语言·数据科学·免费书籍
AI纪元故事会4 天前
《目标检测全解析:从R-CNN到DETR,六大经典模型深度对比与实战指南》
人工智能·yolo·目标检测·r语言·cnn
小八四爱吃甜食5 天前
【R语言】构建GO、KEGG相关不同物种的R包
开发语言·golang·r语言
梦想的初衷~6 天前
生命周期评价(LCA):理论、方法与工具、典型案例全解析
r语言·农业·林业·环境科学·地理·气候变化·生命周期评价
asyxchenchong8886 天前
OpenLCA、GREET、R语言的生命周期评价方法、模型构建
开发语言·r语言
没有梦想的咸鱼185-1037-16636 天前
【生命周期评价(LCA)】基于OpenLCA、GREET、R语言的生命周期评价方法、模型构建
开发语言·数据分析·r语言
zhangfeng11337 天前
亲测有效的mem 流行病预测,时间序列预测,r语言做移动流行区间法,MEM流行病阈值设置指南
开发语言·r语言·生物信息
普通网友9 天前
Golang笔记——Interface类型
r语言
maizeman1269 天前
用R语言生成指定品种与对照的一元回归直线(含置信区间)
开发语言·回归·r语言·置信区间·品种测试