R中的数据类型

R中的数据类型

文章图片
在开始介绍并了解R中的各种数据类型之前, 让我们快速在Terminal和Jupyter Notebook上设置R环境。
以下命令适用于Mac操作系统, 它将在你的终端上安装R。
brew install r --build-from-source

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

文章图片
要在其他操作系统上进行安装, 请随时查看本教程。
现在, 让我们在Jupyter Notebook上将R编程语言添加为内核。确保系统上已经安装了jupyter笔记本。
转到终端并打开R会话, 然后输入以下两个命令, 这会将R内核添加到jupyter笔记本中。
install.packages('IRkernel') IRkernel::installspec()

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

文章图片
现在你已经准备好在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 badugly good badugly 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中的数据类型

文章图片
(资源)
与向量不同, 列表可以包含各种数据类型的元素, 通常被称为值的有序集合。它可以包含向量, 函数, 矩阵, 甚至可以包含其中的另一个列表(嵌套列表)。
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中的数据类型

文章图片
(资源)
向量是一个对象, 用于存储多个信息或相同数据类型的值。向量不能同时具有整数和字符。例如, 如果要存储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中的数据类型

文章图片
(资源)
与向量类似, 矩阵用于存储有关相同数据类型的信息。但是, 与矢量不同, 矩阵能够在其中保存二维信息。
定义矩阵的语法为:
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中的数据类型

文章图片
(资源)
与矩阵不同, 数据帧是矩阵的更通用形式。它以表格形式包含数据。数据帧中的数据可以分布在具有不同数据类型的各个列中。第一列可以是字符, 而第二列可以是整数, 第三列可以是逻辑。
变量或特征采用柱状方式(也称为标头), 而观察结果按行排列, 第一个元素是行名, 后跟实际数据(也称为数据行)。
可以使用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 Aditya26816.05e+04 2Ayush26855.88e+04 3 Akshay27906.21e+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. of5 variables: $ Person: Factor w/ 3 levels "Aditya", "Akshay", ..: 1 3 2 $ Age: num26 26 27 $ Weight: num81 85 90 $ Height: num6 5.8 6.2 $ Salary: num5e+04 8e+04 1e+05

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

PersonAgeWeightHeightSalary Aditya:1Min.:26.00Min.:81.00Min.:5.8Min.: 50000 Akshay:11st Qu.:26.001st Qu.:83.001st Qu.:5.91st Qu.: 65000 Ayush :1Median :26.00Median :85.00Median :6.0Median : 80000 Mean:26.33Mean:85.33Mean:6.0Mean: 76667 3rd Qu.:26.503rd Qu.:87.503rd Qu.:6.13rd Qu.: 90000 Max.:27.00Max.:90.00Max.:6.2Max.:100000

恭喜你完成了本教程。
对于想学习R编程语言的初学者来说, 本教程是一个很好的起点。作为一项很好的练习, 请随时检查与每种数据类型相关的更多帮助器功能。
有很多与R相关的信息尚待整理, 例如R中的条件和控制流, R中的实用程序以及最令人激动的使用R的机器学习, 它们将在以后的教程中介绍, 敬请期待!
请随时在下面的评论部分中提出与本教程相关的任何问题。
【R中的数据类型】如果你想了解有关R的更多信息, 请参加srcmini的Intermediate R课程。

    推荐阅读