R语言基础 | 使用中括号“[]”提取或替换数据

这篇具有很好参考价值的文章主要介绍了R语言基础 | 使用中括号“[]”提取或替换数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


专注系列化、高质量的R语言教程

(查看推文索引


中括号[]是R语言的一个常用操作符,作用是提取(extract)或替换(replace)。本篇推文总结其三种用法:

  • 1 使用下标或名称

  • 2 使用逻辑变量

  • 3 使用重复序数

1 使用下标或名称

在推文R语言的原子类型和数据结构中,学堂君介绍了五种基本数据结构都可以使用中括号[]来提取(查询)、替换元素。

以数据框为例,中括号内可以使用行、列的下标或名称:

mtcars[1:5,1:3] 
##                    mpg cyl disp
## Mazda RX4         21.0   6  160
## Mazda RX4 Wag     21.0   6  160
## Datsun 710        22.8   4  108
## Hornet 4 Drive    21.4   6  258
## Hornet Sportabout 18.7   8  360
mtcars[1:5, c("mpg", "disp", "cyl")] 
##                    mpg disp cyl
## Mazda RX4         21.0  160   6
## Mazda RX4 Wag     21.0  160   6
## Datsun 710        22.8  108   4
## Hornet 4 Drive    21.4  258   6
## Hornet Sportabout 18.7  360   8

对于数据框而言,如果使用单索引指的是列:

mtcars[1:3] 
##                      mpg cyl  disp
## Mazda RX4           21.0   6 160.0
## Mazda RX4 Wag       21.0   6 160.0
## Datsun 710          22.8   4 108.0
## Hornet 4 Drive      21.4   6 258.0
## Hornet Sportabout   18.7   8 360.0

对于矩阵而言,如果使用单索引,1表示其第一列第一行的元素,2表示其第一列第二行的元素,3表示其第一列第三行的元素;第一列数完后则从第二列第一行开始继续数,依次类推。例如:

mat <- as.matrix(mtcars)
mat[1:3]
## [1] 21.0 21.0 22.8

2 使用逻辑变量

这种方法仅适用于行的提取或替换,逻辑变量的长度需要与数据的行数一致

x <- c(1,1, rep(0, 30))
x
##  [1] 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

mtcars[x,] 
##             mpg cyl disp  hp drat   wt  qsec vs am gear carb
## Mazda RX4    21   6  160 110  3.9 2.62 16.46  0  1    4    4
## Mazda RX4.1  21   6  160 110  3.9 2.62 16.46  0  1    4    4

x中只有前两个元素为1(对应逻辑值TRUE),则表示提取数据的前两行。

其拓展形式是使用逻辑判定式(结果也是逻辑变量):

mtcars$mpg > 25
##  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE
## [25] FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE

mtcars[mtcars$mpg > 25,] 
##                 mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2

3 使用重复序数

这种用法不太常见,主要用于替换,学堂君认为这算是R语言基础的一个隐藏技巧。

生成一个由重复序数组成的向量作为索引:

set.seed(1030)
x <- sample(1:3, 32, replace = T)
x  
##  [1] 2 1 2 3 2 2 1 2 1 3 3 2 1 2 1 1 3 1 3 1 2 1 3 1 1 1 3 2 3 1 2 2

c(-1, 0, 1)[x] 
##  [1]  0 -1  0  1  0  0 -1  0 -1  1  1  0 -1  0 -1 -1  1 -1  1 -1  0 -1  1 -1 -1
## [26] -1  1  0  1 -1  0  0
c("good", "better", "best")[x]
##  [1] "better" "good"   "better" "best"   "better" "better" "good"   "better"
##  [9] "good"   "best"   "best"   "better" "good"   "better" "good"   "good"  
## [17] "best"   "good"   "best"   "good"   "better" "good"   "best"   "good"  
## [25] "good"   "good"   "best"   "better" "best"   "good"   "better" "better"

例1:生成一个变量用于标记每行数据对应的mpg变量的四分位数。

data <- mtcars
y <- cut(data$mpg, breaks = quantile(data$mpg), include.lowest = T) 
y <- as.numeric(y) 
y
##  [1] 2 1 2 3 2 2 1 2 1 3 3 2 1 2 1 1 3 1 3 1 2 1 3 1 1 1 3 2 3 1 2 2

data$Q <- c("Q1", "Q2", "Q3", "Q4")[y]
data$Q
##  [1] "Q2" "Q1" "Q2" "Q3" "Q2" "Q2" "Q1" "Q2" "Q1" "Q3" "Q3" "Q2" "Q1" "Q2" "Q1"
## [16] "Q1" "Q3" "Q1" "Q3" "Q1" "Q2" "Q1" "Q3" "Q1" "Q1" "Q1" "Q3" "Q2" "Q3" "Q1"
## [31] "Q2" "Q2"

例2:已知前面的随机变量x中的元素只包含1、2、3。生成一个变量:当x = 1时它取mpg的值;当x = 2时,它取cyl的值;当x = 3时,它取disp的值。文章来源地址https://www.toymoban.com/news/detail-519910.html

到了这里,关于R语言基础 | 使用中括号“[]”提取或替换数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用go语言构建区块链 Part1.基础原型

    英文源地址 区块链技术是21世纪最具变革型的技术之一,它仍处于成长阶段, 其潜力尚未完全实现.从本质上说, 区块链是一个分布式的记账数据库.但它的独特之处在于它不是一个私有数据库,而是一个公共数据库, 也就是说, 每个使用它的人都有它的完整或部分副本.而且,只有在

    2024年02月07日
    浏览(50)
  • AIGC基础:大型语言模型 (LLM) 为什么使用向量数据库,嵌入(Embeddings)又是什么?

    嵌入: 它是指什么?嵌入是将数据(例如文本、图像或代码)转换为高维向量的数值表示。这些向量捕捉了数据点之间的语义含义和关系。可以将其理解为将复杂数据翻译成 LLM 可以理解的语言。 为什么有用?原始数据之间的相似性反映在高维空间中对应向量之间的距离上。

    2024年02月21日
    浏览(56)
  • 【蓝桥杯备赛Java组】语言基础|竞赛常用库函数|输入输出|String的使用|常见的数学方法|大小写转换

    🎥 个人主页:深鱼~ 🔥收录专栏:蓝桥杯 🌄欢迎 👍点赞✍评论⭐收藏 目录 一、编程基础 1.1 Java类的创建  1.2 Java方法  1.3 输入输出  1.4 String的使用 二、竞赛常用库函数 1.常见的数学方法 2.大小写转换 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,

    2024年01月21日
    浏览(70)
  • 【蓝桥杯备赛Java组】第一章·语言基础|竞赛常用库函数|输入输出|String的使用|常见的数学方法|大小写转换

    🎥 个人主页:深鱼~ 🔥收录专栏:蓝桥杯 🌄欢迎 👍点赞✍评论⭐收藏 目录 一、编程基础 1.1 Java类的创建  1.2 Java方法  1.3 输入输出  1.4 String的使用 二、竞赛常用库函数 1.常见的数学方法 2.大小写转换 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,

    2024年01月19日
    浏览(72)
  • java语言基础(有c语言基础)

    jdk+记事本编译 编译javac Hello.java 执行java Hello byte b=123;//整型8位最大值是2的7次减一,第一位是符号位 short s=32156;//最大是2的15次-1 int i=101;//31 long l=123;63 float s=3.14; double d=3.14; boolean ok=true; char c=\\\'a\\\'; 3.14默认double 在后面加f float s=3.14f; (F不区分大小写 java无符号 字符 可以赋值

    2024年02月16日
    浏览(40)
  • 【C快学-C语言程序设计(基础篇)】从VSCode中使用C编写我的第一个Hello world

    简介:本专栏是一个C语言基础入门知识学习的一个专栏 面向:广大C友 工具:VSCODE 博主:一个友好且宠粉的博主,送书活动小专栏,不定期抽奖送图书给粉丝 社区:🦈山鱼社区 我这里是使用超级强大的vscode来进行C语言的学习的,因为vscode有着许多好用且方便的插件,能够

    2024年02月13日
    浏览(47)
  • Prompt工程师指南[从基础到进阶篇]:用于开发和优化提示,以有效地使用语言模型(LMs)进行各种应用和研究主题

    Prompt工程是一种相对较新的学科,用于开发和优化提示,以有效地使用语言模型(LMs)进行各种应用和研究主题。Prompt工程技能有助于更好地理解大型语言模型(LLMs)的能力和局限性。研究人员使用Prompt工程来改善LLMs在各种常见和复杂任务上的能力, Prompt engineering(提示工程

    2024年02月04日
    浏览(58)
  • R语言基础之R语言入门

             R语言最初是由新西兰奥克兰大学统计系的教授 Ross Ihaka 和 Robert Gentleman 在 S语言基础上开发完成的。是一门解释性语言。在我看来R语言是一门数学性极强的语言,或者说这是一门为数学而生的语言,因为其具有极其出色的计算与统计分析能力,但是在程序流转方

    2024年02月16日
    浏览(43)
  • 汇编语言笔记(一)——汇编语言基础

    一、开发环境 我使用visual studio 2022 preview,其他版本的设置大同小异。 第一步: 打开visual studio,点击“创建新项目”: 第二步: visual studio并没有专门的汇编项目,所以需要挂羊头卖狗肉,选择C++空项目 第三步: 输入项目名称,点击创建 第四步: 鼠标右键单击项目名称—

    2024年02月05日
    浏览(39)
  • 码蹄杯语言基础:选择结构(C语言)

    请编写一个简单程序,输入一个整数,和10比较,输出比较结果 格式 输入格式: 输入整型 输出格式: 输出…大于或者等于或者小于10 输入a,b两个整数,输出他们之间的最小值 格式 输入格式: 输入2个整数用空格分隔 输出格式: 输出为整型 输入a,b两个整数,输出他们之间

    2024年02月06日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包