数据结构基本操作_R中的数据结构简介及类别变量的基本操作

本文介绍了R语言中的基本数据结构,包括向量、矩阵、数组、数据框和因子,特别是因子的使用。因子是处理分类变量的重要工具,分为名义变量和顺序变量。文章展示了如何将字符向量转换为因子,以及如何更改因子的水平和查看其摘要。通过实例展示了ggplot2包在画图时如何根据因子属性区分数据点颜色,以分析不同类别数据的差异。
摘要由CSDN通过智能技术生成

R中的数据结构 (data structures) 包含:

  1. 向量(vector):用于储存数值型、字符型或逻辑型数据的一维数组

  2. 矩阵(matrix):二维数组,每个元素拥有相同模式

  3. 数组(array):与矩阵类似,但维度可以大于2

  4. 数据框(data frame):不同列可包含不同模式数据,为最常见的数据结构

  5. 因子(factor):分类变量,包含名义变量和顺序变量两类

  6. 列表(lists): 一些对象的有序集合,可包含向量、矩阵、数据框等

56a644898a08721debdef6ecaf084830.png

向量可能长这样,只有一个维度,下图是一个数值型向量

8b1fe0bc08a9a92fdd5823a8069af890.png

因子类似于向量,但取值是有限的,比如下图包含F女性和M男性,只有两个水平

5a76063b0f3a5115d66cd030afa99a9c.png

矩阵是两维的,下图是一个数值型矩阵。多个相同长度的向量可组合成一个矩阵,但包含的数据类型必须一致

b76b67d18ac37579e35a676e193ef08c.png

数据框可包含多种不同类型的向量,下图的第一列是数值型,第二列是因子型,第三列是字符型

38be8ed506dad57cb10e1bd85a821c27.png

列表是数据结构的集合,和数据框类似,但每列包含的向量长度可以不同

940431c5756321392d05ed756b5e49de.png

有了以上的概念后,下面介绍因子factor在R中的一些基本操作

类别变量(categorical variables)或者叫分类变量在R中被称为factor,比如“性别”便是分类变量,包含“男”和“女”两个水平。

# 性别向量
gender_vector "Male", "Female", "Female", "Male", "Male")

class()查看该向量的种类

class(gender_vector)
[1] "character"

显示gender_vector为字符型(character),下面使用factor()将其转换为factor

# 转换为factor类型
factor_gender_vector 
factor_gender_vector
[1] Male   Female Female Male   Male  
Levels: Female Male

可以看到转换后,系统便可以识别该向量的两个水平(Levels)为Female和Male

但类别变量也分两种:

  • 称名变量或名义变量(nominal categorical variable)

  • 顺序变量或有序变量(ordinal categorical variable)

名义变量没有顺序,如动物包含蜥蜴、大象、狮子和蛇,它们之间并没有顺序或高下之分

animals_vectors "蜥蜴","大象","狮子","蛇")
factor_animals_vector factor_animals_vector
[1] 蜥蜴 大象 狮子 蛇  
Levels: 大象 蛇 狮子 蜥蜴

顺序变量有次序之分,如温度包含低中高三种,高排在中或低前面

temperature_vector "高","低","中","低","高")
factor_temperature_vector "低","中","高"))
factor_temperature_vector
[1] 高 低 中 低 高
Levels: 低 

如果拿到数据时,类别变量已经是factor类型,并且包含特定顺序的水平,而我们想改变水平的名称,可以使用levels()

levels(factor_gender_vector)
[1] "Female" "Male"

“性别”变量的水平是“Female”“Male”,为什么不是“Male”“Female”呢?

这是因为R默认按照字母顺序表排列,F在M之前

我们可以通过用levels()改变这一顺序

levels(factor_gender_vector) "Male","Female")
levels(factor_gender_vector)
[1] "Male"   "Female"

summary()查看数据摘要

summary(factor_gender_vector)
  Male Female 
     2      3 

可以看出该向量包含男性2人,女性3人

著名数据集iris中的Species(花的种类)便是factor型,可以用str()查看iris数据集的基本结构,可看到最后一列变量Species是个分类变量,包含3个水平

str(iris)
'data.frame':    150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

有时我们画散点图的时候,很想看不同类别的数据表现是否有区别

如钻石数据diamonds,包含克拉、价格(美元)、成色等,我们想知道克拉和价格的关系

可以看出该数据集中的成色color变量是一个顺序变量,包含7个水平,J是最差的成色,D是最好的成色

str(diamonds)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':    53940 obs. of  10 variables:
 $ carat  : num  0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
 $ cut    : Ord.factor w/ 5 levels "Fair"<"Good"<..:>5 4 2 4 2 3 3 3 1 3 ...
 $ color  : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..:>2 2 2 6 7 7 6 5 2 5 ...
 $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..:>2 3 5 4 2 6 7 3 4 5 ...
 $ depth  : num  61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
 $ table  : num  55 61 65 58 58 57 57 55 61 61 ...
 $ price  : int  326 326 327 334 335 336 336 337 337 338 ...
 $ x      : num  3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
 $ y      : num  3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
 $ z      : num  2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...

使用ggplot2包中的qplot(),用法很简单,第一个参数填自变量,第二个参数填因变量,第三个参数填数据

qplot(carat, price, data = diamonds)

88a20b02b08f310e2491dd077c15c80e.png

很显然,钻石越重,价格越高。但如果我们想要在图中看到不同成色的钻石其克拉和价格的关系是怎样的,又该如何操作呢?

只需要在qplot()中加入一个color参数即可,设置color为根据diamonds数据集中的成色变量进行绘图

qplot(carat, price, data = diamonds, color = diamonds$color)

0e0c89f01fc45187201e9537462a0f1b.png

此时,不同成色的钻石数据采用了不同的颜色绘制,便于我们更直观地找出一些insight。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值