R语言取子集

本文详细介绍了R语言中取子集的操作,包括各种索引类型如正整数、负整数、逻辑向量和字符串索引,以及取子集操作符的使用,如简化与保留原则。内容涵盖原子向量、列表、矩阵、数据框、S3和S4对象的取子集方法,并通过实例展示了在数据分析中的应用。此外,还讨论了取子集与任务分派的结合使用,以及如何解决出界索引和缺失索引问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

取子集

R的取子集操作非常快捷灵活。掌握R中的取子集操作能让你用简洁的方式对数据进行复杂的操作,这是其他编程语言所望成莫及的。R的取子集不是那么容易学习,这之前你需要先了解几个相关的概念:

  • 三个取子集操作符。

  • 六种取子集的索引方法。

  • 对不同数据类型(比如向量,列表,因子,矩阵和数据框)取子集结果的不同。

  • 取子集和任务分派的结合使用。

这章将帮助你一步一步掌握R的取子集操作。首先我们从最简单的取子集(即使用[对原子向量取子集)开始讲解,然后慢慢展开,学习对较复杂的数据结构比如数组和列表取子集以及使用其他取子集操作符[[$。接下来会讲解如何结合取子集和任务分派来修改对象的内容。最后我们来看看一些有用的取子集应用实例。

取子集是str()函数的补充。str()函数帮助你了解对象的数据结构,取子集让你从对象中提取感兴趣的数据片段。

测试

做做这个简单的测试看看你是否需要阅读本章内容。如果你能很快地得到答案,你可以轻松地跳过本章。本章最后提供参考答案

  1. 使用正数索引,负数索引,逻辑向量索引以及字符串向量索引取子集分别有什么不同?

  2. 对列表使用[[[或者$有什么不同?

  3. 什么时候需要使用drop = FALSE

  4. 如果x是一个矩阵,x[] <- 0会得到什么结果,这和x <- 0的结果有什么不同?

  5. 如何使用向量的名字来重新标记分类变量?

概要
  • 数据结构 首先介绍如何使用[以及六种对原子向量取子集的索引方法。然后讲解如何将这六种索引方法应用到列表,矩阵,数据框和S3对象。 

  • 取子集操作符 介绍另外两种取子集操作符[[$,着重介绍简化与保留的原则。

  • 取子集和任务分派学习子分配的艺术,结合使用取子集和分派来修改对象的部分类容。 

  • 实例运用 带你了解数据分析中取子集的八种常见运用。

索引类型 

学习原子向量的取子集是最简单的,原子向量的取子集操作可以很容易地被引申运用到高维和其他更复杂的数据结构。这里我们将从最常用的取子集操作符[开始讲解。后面的取子集操作符一节会介绍另外两种操作符,[[$

原子向量

以下用一个简单的向量x来讲解不同的取子集方式。

x <- c(2.1, 4.2, 3.3, 5.4) #注意:小数点后面的数实际标明了向量中元素的位置。

你可以用如下六种索引方式对一个向量进行取子集操作:

  • 正整数索引 返回向量中特定位置的元素: 

    x[c(3, 1)]
    x[order(x)]# 重复的索引返回重复的值x[c(1, 1)]# 实数默认被去尾为整数x[c(2.1, 2.9)]
  • 负整数索引 去除向量中特定位置的元素:

    x[-c(3, 1)]

    正整数和负整数不可以在同一个取子集操作中结合使用:

    x[c(-1, 2)]
  • 逻辑向量索引 选择对应值为TRUE的元素。这可能是最有用的取子集操作,因为你在代码中常常得到逻辑向量。

    x[c(TRUE, TRUE, FALSE, FALSE)]
    x[x > 3]

    如果使用的逻辑向量的长度比被取子集的向量长度短,逻辑向量会被循环到与该向量相同的长度。

    x[c(TRUE, FALSE)]# 等同于x[c(TRUE, FALSE, TRUE, FALSE)]

    索引中如果出现缺失值,结果中也会对应返回缺失值:

    x[c(TRUE, TRUE, NA, FALSE)]
  • 空索引 返回原向量。这对向量取子集没有什么用处,可是对于矩阵,数据框和数组却非常有用。并且还可以和任务分派联合使用。

    x[]
  • 零索引 返回一个长度为零的向量。这个不常用,但是可以用来生成测试数据。

    x[0]
  • 字符串向量索引 如果向量有名字,你也可以使用字符串向量索引返回与名字相匹配的元素:

    (y <- setNames(x, letters[1:4]))
    y[c("d", "c", "a")]# 和整数索引一样,你也可以使用重复字符串y[c("a", "a", "a")]# 使用[取子集时,名字必须是完全匹配的z <- c(abc = 1, def = 2)
    z[c("a", "d")]

列表

对列表取子集与对原子向量取子集原理相同。使用[将会始终返回一个向量;后面要讲解的[[$则会提取一个向量中的元素。

矩阵和数组 

可以使用如下三种方法对高维数据取子集:

  • 多个向量

  • 单个向量

  • 矩阵

最常用的对矩阵和数组取子集就是对一维向量取子集的简单衍生,即对每一个维度提供一个用逗号彼此隔开的索引。空索引这时就有用处了,它意味着保留所有行,或者所有列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值