个性化阅读
专注于IT技术分析

R中的数据类型

R中的数据类型1

在开始介绍并了解R中的各种数据类型之前, 让我们快速在Terminal和Jupyter Notebook上设置R环境。

以下命令适用于Mac操作系统, 它将在你的终端上安装R。

brew install r --build-from-source

要验证安装是否成功, 只需在终端中键入R(大写), 你将进入R会话, 如下所示。

R中的数据类型2

要在其他操作系统上进行安装, 请随时查看本教程。

现在, 让我们在Jupyter Notebook上将R编程语言添加为内核。确保系统上已经安装了jupyter笔记本。

转到终端并打开R会话, 然后输入以下两个命令, 这会将R内核添加到jupyter笔记本中。

install.packages('IRkernel')
IRkernel::installspec()

一旦以上两个命令成功执行, 请从终端运行jupyter并打开带有R内核的笔记本, 如下所示:

R中的数据类型3

现在你已经准备好在jupyter笔记本上编写你的第一个R代码。

介绍

为了充分利用R, 了解和理解R中存在的各种数据类型和数据结构以及它们如何工作非常重要。它们在几乎所有问题中都起着关键作用, 尤其是当你处理以数据为中心的机器学习问题时。

在编程语言中, 我们通常需要变量来存储信息, 这些变量可以是整数, 字符, 浮点数, 布尔值等。变量的类型完全取决于它所持有的信息类型。如果为其分配了整数, 则该变量的数据类型为int。变量仅仅是保留值的存储位置。创建变量后, 将立即为其保留一些内存空间。

根据变量的数据类型, 操作系统将分配一些内存。例如, 在R编程中, 保存整数的变量将为字符保留4个字节和1个字节的内存。

诸如C, C ++和Java之类的编程语言将变量声明为数据类型。但是, 在Python和R中, 变量是一个对象。对象不过是具有少量属性和应用于其属性的方法的数据结构。

本教程将讨论各种R对象或数据结构, 例如:

  • 向量
  • 列表
  • 矩阵
  • 数组
  • factor
  • 数据帧

首先, 让我们了解一些构建R对象的基本数据类型, 例如数字, 整数, 字符, 因子和逻辑。

  • 数值:具有十进制值或本质上为小数的数字的数据类型为数字。
num <- 1.2
print(num)
[1] 1.2

你可以使用关键字class()检查数据类型。

class(num)
'numeric'
  • 整数:不包含十进制值的数字的数据类型为整数。但是, 要创建整数数据类型, 请显式使用as.integer()并将变量作为参数传递。
int <- as.integer(2.2)
print(int)
[1] 2
class(int)
'integer'
  • 字符:顾名思义, 它可以是字母, 也可以用引号引起来的字母组合被R视为字符数据类型。可以是字母或数字。
char <- "srcmini"
print(char)
[1] "srcmini"
class(char)
'character'
char <- "12345"
print(char)
[1] "12345"
class(char)
'character'
  • 逻辑:布尔值等值可以为True和False的变量称为逻辑变量。
log_true <- TRUE
print(log_true)
[1] TRUE
class(log_true)
'logical'
log_false <- FALSE
print(log_false)
[1] FALSE
class(log_false)
'logical'
  • factor:它们是一种数据类型, 用于表示质量关系, 例如颜色, 好坏, 课程或电影收视率等。它们在统计建模中很有用。

为此, 你将使用c()函数, 该函数通过组合所有元素来返回向量(一维)。

fac <- factor(c("good", "bad", "ugly", "good", "bad", "ugly"))
print(fac)
[1] good bad  ugly good bad  ugly
Levels: bad good ugly
class(fac)
'factor'

fac因子分为好, 坏和丑三个级别, 可以使用关键字级别进行检查, 级别的类型是字符。

levels(fac)
  1. ‘坏’
  2. ‘好’
  3. ‘丑陋’
nlevels(fac)
3
class(levels(fac))
'character'

在继续前进之前, 让我们了解一些可以方便使用的重要提示!

  • 始终记住, R编程语言区分大小写。上面定义的所有对象都应以相同的方式使用, 无论是上方还是下方, 如下例所示。
Num
Error in eval(expr, envir, enclos): object 'Num' not found
Traceback:
  • 在R中, 你可以使用关键字ls()检查工作环境中你已定义的所有变量或对象, 如下所示。
ls()
  1. ‘炭’
  2. ‘int’
  3. ‘num’

列表

R中的数据类型4

(资源)

与向量不同, 列表可以包含各种数据类型的元素, 通常被称为值的有序集合。它可以包含向量, 函数, 矩阵, 甚至可以包含其中的另一个列表(嵌套列表)。

R中的列表是一索引的, 即索引以一开始。

让我们通过一个简单的示例来理解列表的概念, 该示例将在一个列表中存储三种不同类型的数据类型。

lis1 <- 1:5  # Integer Vector
lis1
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
lis2 <- factor(1:5)  # Factor Vector
lis2
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

级别:

  1. ‘1’
  2. ‘2’
  3. ‘3’
  4. ‘4’
  5. ‘5’
lis3 <- letters[1:5]  # Character Vector
lis3
  1. ‘一个’
  2. ‘b’
  3. ‘C’
  4. ‘d’
  5. “与”
combined_list <- list(lis1, lis2, lis3)
combined_list
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

级别:

  1. ‘1’
  2. ‘2’
  3. ‘3’
  4. ‘4’
  5. ‘5’
  1. ‘一个’
  2. ‘b’
  3. ‘C’
  4. ‘d’
  5. “与”

让我们分别访问列表中的每个向量。为此, 你将使用双方括号, 因为三个向量位于列表内的一个级别上。 python Combinedlist [[1]]

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

python Combinedlist [[2]]

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5

级别:

  1. ‘1’
  2. ‘2’
  3. ‘3’
  4. ‘4’
  5. ‘5’
combined_list[[3]]
  1. ‘一个’
  2. ‘b’
  3. ‘C’
  4. ‘d’
  5. “与”

现在, 让我们尝试从第三个向量访问第五个元素, 它给出字母e。

combined_list[[3]][5]
'e'

最后, 让我们尝试拉平列表。要记住的重要一件事是, 因为combined_list是字符和数字数据类型的组合, 所以字符数据类型将具有优先权, 而完整列表的数据类型将成为字符。

flat_list <- unlist(combined_list)
class(flat_list)
'character'
flat_list
  1. ‘1’
  2. ‘2’
  3. ‘3’
  4. ‘4’
  5. ‘5’
  6. ‘1’
  7. ‘2’
  8. ‘3’
  9. ‘4’
  10. ‘5’
  11. ‘一个’
  12. ‘b’
  13. ‘C’
  14. ‘d’
  15. “与”
length(flat_list)
15

向量

R中的数据类型5

(资源)

向量是一个对象, 用于存储多个信息或相同数据类型的值。向量不能同时具有整数和字符。例如, 如果要存储100个学生的总成绩, 而不是为每个学生创建100个不同的变量, 则将创建一个长度为100的向量, 该向量将在其中存储所有学生成绩。

可以使用函数c()创建向量, 该函数将合并所有元素并返回一维数组。

让我们用五个班级数字学生的数据创建一个矢量标记。

marks <- c(88, 65, 90, 40, 65)
class(marks)
'numeric'

让我们检查向量的长度, 该向量应该返回其中包含的元素数。

length(marks)
5

现在, 让我们尝试通过索引访问特定元素。

marks[4]
40
marks[5]
65
marks[6] #returns NA since there is no sixth element in the vector

<NA>

  • 切片:类似于Python, 切片的概念也可以在R中应用。

    让我们尝试使用切片从第二到第五访问元素。

marks[2:5]
  1. 65
  2. 90
  3. 40
  4. 65

现在让我们创建一个类似于创建数字字符的字符向量。

char_vector <- c("a", "b", "c")
print(char_vector)
[1] "a" "b" "c"
class(char_vector)

‘字符’

length(char_vector)
3
char_vector[1:3]
  1. ‘一个’
  2. ‘b’
  3. ‘C’

如果我们创建一个同时具有数字和字符值的向量, 则数字值将转换为字符数据类型。

char_num_vec <- c(1, 2, "a")
char_num_vec
  1. ‘1’
  2. ‘2’
  3. ‘一个’
class(char_num_vec)
'character'

让我们借助切片概念创建具有1024个数值的向量。

vec <- c(1:1024)

现在, 尝试访问中间元素和最后一个元素。为此, 你将使用长度功能。

vec[length(vec)]
1024
vec[length(vec)/2]
512
  • 如何创建奇数向量?

要创建奇数向量, 可以使用seq函数, 该函数具有三个参数:开始, 结束和步长。

seq(1, 10, by = 2)
  1. 1
  2. 3
  3. 5
  4. 7
  5. 9

矩阵

R中的数据类型6

(资源)

与向量类似, 矩阵用于存储有关相同数据类型的信息。但是, 与矢量不同, 矩阵能够在其中保存二维信息。

定义矩阵的语法为:

M <- matrix(vector, nrow=r, ncol=c, byrow=FALSE, dimnames=list(char_vector_rownames, char_vector_colnames))

byrow = TRUE表示矩阵应由行填充。 byrow = FALSE表示矩阵应由列填充(默认值)。

让我们快速定义形状为$ 2 \ times3 $的矩阵M。

M = matrix( c('AI', 'ML', 'DL', 'Tensorflow', 'Pytorch', 'Keras'), nrow = 2, ncol = 3, byrow = TRUE)
print(M)
     [, 1]         [, 2]      [, 3]   
[1, ] "AI"         "ML"      "DL"   
[2, ] "Tensorflow" "Pytorch" "Keras"

让我们使用切片的概念, 并从行和列中获取元素。

M[1:2, 1:2] #the first dimension selects both rows while the second dimension will select
#elements from 1st and 2nd column
A matrix: 2 × 2 of type chr
AI ML
张量流 火炬

数据帧

R中的数据类型7

(资源)

与矩阵不同, 数据帧是矩阵的更通用形式。它以表格形式包含数据。数据帧中的数据可以分布在具有不同数据类型的各个列中。第一列可以是字符, 而第二列可以是整数, 第三列可以是逻辑。

变量或特征采用柱状方式(也称为标头), 而观察结果按行排列, 第一个元素是行名, 后跟实际数据(也称为数据行)。

可以使用data.frame()函数创建DataFrame。

DataFrame已广泛用于读取逗号分隔文件(CSV), 文本文件。它们的用途不仅限于读取数据, 还可以将它们用于机器学习问题, 尤其是在处理数字数据时。 DataFrames对于理解数据, 数据整理, 绘图和可视化很有用。

让我们创建一个虚拟数据集并学习一些特定于数据帧的功能。

dataset <- data.frame(
   Person = c("Aditya", "Ayush", "Akshay"), Age = c(26, 26, 27), Weight = c(81, 85, 90), Height = c(6, 5.8, 6.2), Salary = c(50000, 80000, 100000)
)
print(dataset)
  Person Age Weight Height Salary
1 Aditya  26     81    6.0  5e+04
2  Ayush  26     85    5.8  8e+04
3 Akshay  27     90    6.2  1e+05
class(dataset)
'data.frame'
nrow(dataset) # this will give you the number of rows that are there in the dataset dataframe
3
ncol(dataset) # this will give you the number of columns that are there in the dataset dataframe
5
df1 = rbind(dataset, dataset) # a row bind which will append the arguments in row fashion.
df1
A data.frame: 6 × 5
年龄 重量 高度 薪水
<FCT> <dbl> <dbl> <dbl> <dbl>
阿迪亚 26 81 6.0 5e+04
阿育 26 85 5.8 8e+04
阿克沙伊 27 90 6.2 1e+05
阿迪亚 26 81 6.0 5e+04
阿育 26 85 5.8 8e+04
阿克沙伊 27 90 6.2 1e+05
df2 = cbind(dataset, dataset) # a column bind which will append the arguments in column fashion.
df2
A data.frame: 3 × 10
年龄 重量 高度 薪水 年龄 重量 高度 薪水
<FCT> <dbl> <dbl> <dbl> <dbl> <FCT> <dbl> <dbl> <dbl> <dbl>
阿迪亚 26 81 6.0 5e+04 阿迪亚 26 81 6.0 5e+04
阿育 26 85 5.8 8e+04 阿育 26 85 5.8 8e+04
阿克沙伊 27 90 6.2 1e+05 阿克沙伊 27 90 6.2 1e+05

让我们看一下head函数, 当你有数百万条记录并且你只想查看数据的前几行时, 此函数非常有用。同样, tail函数将输出数据的最后几行。

head(df1, 3) # here only three rows will be printed
A data.frame: 3 × 5
年龄 重量 高度 薪水
<FCT> <dbl> <dbl> <dbl> <dbl>
1 阿迪亚 26 81 6.0 5e+04
2 阿育 26 85 5.8 8e+04
3 阿克沙伊 27 90 6.2 1e+05
str(dataset) #this returns the individual class or data type information for each column.
'data.frame':    3 obs. of  5 variables:
 $ Person: Factor w/ 3 levels "Aditya", "Akshay", ..: 1 3 2
 $ Age   : num  26 26 27
 $ Weight: num  81 85 90
 $ Height: num  6 5.8 6.2
 $ Salary: num  5e+04 8e+04 1e+05

现在让我们看一下summary()函数, 当你想了解数据集的统计信息时, 该函数非常有用。如下所示, 它将数据分为三个四分位数, 你可以基于这些四分位数获得有关数据分布的一些直觉。它还显示数据集中是否缺少任何值。

summary(dataset)
    Person       Age            Weight          Height        Salary      
 Aditya:1   Min.   :26.00   Min.   :81.00   Min.   :5.8   Min.   : 50000  
 Akshay:1   1st Qu.:26.00   1st Qu.:83.00   1st Qu.:5.9   1st Qu.: 65000  
 Ayush :1   Median :26.00   Median :85.00   Median :6.0   Median : 80000  
            Mean   :26.33   Mean   :85.33   Mean   :6.0   Mean   : 76667  
            3rd Qu.:26.50   3rd Qu.:87.50   3rd Qu.:6.1   3rd Qu.: 90000  
            Max.   :27.00   Max.   :90.00   Max.   :6.2   Max.   :100000  

恭喜你完成了本教程。

对于想学习R编程语言的初学者来说, 本教程是一个很好的起点。作为一项很好的练习, 请随时检查与每种数据类型相关的更多帮助器功能。

有很多与R相关的信息尚待整理, 例如R中的条件和控制流, R中的实用程序以及最令人激动的使用R的机器学习, 它们将在以后的教程中介绍, 敬请期待!

请随时在下面的评论部分中提出与本教程相关的任何问题。

如果你想了解有关R的更多信息, 请参加srcmini的Intermediate R课程。

赞(0)
未经允许不得转载:srcmini » R中的数据类型

评论 抢沙发

评论前必须登录!