博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构基本操作_R中的数据结构简介及类别变量的基本操作
阅读量:6269 次
发布时间:2019-06-22

本文共 3450 字,大约阅读时间需要 11 分钟。

cd476ee121bd07af5165ca1f75706746.png

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

  1. 向量(vector):用于储存数值型、字符型或逻辑型数据的一维数组
  2. 矩阵(matrix):二维数组,每个元素拥有相同模式
  3. 数组(array):与矩阵类似,但维度可以大于2
  4. 数据框(data frame):不同列可包含不同模式数据,为最常见的数据结构
  5. 因子(factor):分类变量,包含名义变量和顺序变量两类
  6. 列表(lists): 一些对象的有序集合,可包含向量、矩阵、数据框等

445d3784fa51d6415e34decfa4c4e46b.png

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

ae6dc62c992372c3dd1479dc306bbdd2.png

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

80b8b23c75c735c400dc55cbd33efa99.png

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

9b2e21bccfbe4ef31b1d4b888ba582b8.png

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

7e154e0dd5b0c089a32b1919f66ab7e3.png

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

dcacee1ddec65107a288663354d11dad.png

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

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

# 性别向量gender_vector <- c("Male", "Female", "Female", "Male", "Male")

class()查看该向量的种类

class(gender_vector)[1] "character"

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

# 转换为factor类型factor_gender_vector <- 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 <- c("蜥蜴","大象","狮子","蛇")factor_animals_vector <- factor(animals_vectors)factor_animals_vector[1] 蜥蜴 大象 狮子 蛇  Levels: 大象 蛇 狮子 蜥蜴

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

temperature_vector <- c("高","低","中","低","高")factor_temperature_vector <- factor(temperature_vector, ordered = TRUE, levels = c("低","中","高"))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) <- c("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)

67682a5ab4cc5f2fdf465daff1f2ebe0.png

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

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

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

0b89d8d5dd0677943d47e059ef54bdb2.png

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

转载地址:http://gvspa.baihongyu.com/

你可能感兴趣的文章
用树莓派实现RGB LED的颜色控制——C语言版本号
查看>>
VC2012编译CEF3-转
查看>>
java 自己定义异常,记录日志简单说明!留着以后真接复制
查看>>
Android 使用AIDL实现进程间的通信
查看>>
机器学习(Machine Learning)&深度学习(Deep Learning)资料
查看>>
jquery的图片轮播 模板类型
查看>>
C# 获取文件名及扩展名
查看>>
Web安全学习计划
查看>>
输出有序数组的连续序列范围
查看>>
zinnia项目功能分析
查看>>
windows cmd for paramiko
查看>>
SQL经典面试题集锦
查看>>
View学习(一)-DecorView,measureSpec与LayoutParams
查看>>
色彩力量!21款你应该知道的优秀品牌设计
查看>>
SDUT 3503 有两个正整数,求N!的K进制的位数
查看>>
【.Net】C# 根据绝对路径获取 带后缀文件名、后缀名、文件名、不带文件名的文件路径...
查看>>
Redis常用命令速查 <第二篇>
查看>>
CSS规范
查看>>
使用FastDateFormat来代替JDK自带的DateFormat
查看>>
Python爬虫从入门到放弃(十六)之 Scrapy框架中Item Pipeline用法
查看>>