文章图片
在开始介绍并了解R中的各种数据类型之前, 让我们快速在Terminal和Jupyter Notebook上设置R环境。
以下命令适用于Mac操作系统, 它将在你的终端上安装R。
brew install r --build-from-source
要验证安装是否成功, 只需在终端中键入R(大写), 你将进入R会话, 如下所示。
文章图片
要在其他操作系统上进行安装, 请随时查看本教程。
现在, 让我们在Jupyter Notebook上将R编程语言添加为内核。确保系统上已经安装了jupyter笔记本。
转到终端并打开R会话, 然后输入以下两个命令, 这会将R内核添加到jupyter笔记本中。
install.packages('IRkernel')
IRkernel::installspec()
一旦以上两个命令成功执行, 请从终端运行jupyter并打开带有R内核的笔记本, 如下所示:
文章图片
现在你已经准备好在jupyter笔记本上编写你的第一个R代码。
介绍 为了充分利用R, 了解和理解R中存在的各种数据类型和数据结构以及它们如何工作非常重要。它们在几乎所有问题中都起着关键作用, 尤其是当你处理以数据为中心的机器学习问题时。
在编程语言中, 我们通常需要变量来存储信息, 这些变量可以是整数, 字符, 浮点数, 布尔值等。变量的类型完全取决于它所持有的信息类型。如果为其分配了整数, 则该变量的数据类型为int。变量仅仅是保留值的存储位置。创建变量后, 将立即为其保留一些内存空间。
根据变量的数据类型, 操作系统将分配一些内存。例如, 在R编程中, 保存整数的变量将为字符保留4个字节和1个字节的内存。
诸如C, C ++和Java之类的编程语言将变量声明为数据类型。但是, 在Python和R中, 变量是一个对象。对象不过是具有少量属性和应用于其属性的方法的数据结构。
本教程将讨论各种R对象或数据结构, 例如:
- 向量
- 列表
- 矩阵
- 数组
- factor
- 数据帧
- 数值:具有十进制值或本质上为小数的数字的数据类型为数字。
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:它们是一种数据类型, 用于表示质量关系, 例如颜色, 好坏, 课程或电影收视率等。它们在统计建模中很有用。
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)
- ‘ 坏’
- ‘ 好’
- ‘ 丑陋’
nlevels(fac)
3
class(levels(fac))
'character'
在继续前进之前, 让我们了解一些可以方便使用的重要提示!
- 始终记住, R编程语言区分大小写。上面定义的所有对象都应以相同的方式使用, 无论是上方还是下方, 如下例所示。
Num
Error in eval(expr, envir, enclos): object 'Num' not found
Traceback:
- 在R中, 你可以使用关键字ls()检查工作环境中你已定义的所有变量或对象, 如下所示。
ls()
- ‘ 炭’
- ‘ int’
- ‘ num’
文章图片
(资源)
与向量不同, 列表可以包含各种数据类型的元素, 通常被称为值的有序集合。它可以包含向量, 函数, 矩阵, 甚至可以包含其中的另一个列表(嵌套列表)。
R中的列表是一索引的, 即索引以一开始。
让我们通过一个简单的示例来理解列表的概念, 该示例将在一个列表中存储三种不同类型的数据类型。
lis1 <
- 1:5# Integer Vector
lis1
- 1
- 2
- 3
- 4
- 5
lis2 <
- factor(1:5)# Factor Vector
lis2
- 1
- 2
- 3
- 4
- 5
- ‘ 1’
- ‘ 2’
- ‘ 3’
- ‘ 4’
- ‘ 5’
lis3 <
- letters[1:5]# Character Vector
lis3
- ‘ 一个’
- ‘ b’
- ‘ C’
- ‘ d’
- “ 与”
combined_list <
- list(lis1, lis2, lis3)
combined_list
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
- ‘ 1’
- ‘ 2’
- ‘ 3’
- ‘ 4’
- ‘ 5’
- ‘ 一个’
- ‘ b’
- ‘ C’
- ‘ d’
- “ 与”
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
- ‘ 1’
- ‘ 2’
- ‘ 3’
- ‘ 4’
- ‘ 5’
combined_list[[3]]
- ‘ 一个’
- ‘ b’
- ‘ C’
- ‘ d’
- “ 与”
combined_list[[3]][5]
'e'
最后, 让我们尝试拉平列表。要记住的重要一件事是, 因为combined_list是字符和数字数据类型的组合, 所以字符数据类型将具有优先权, 而完整列表的数据类型将成为字符。
flat_list <
- unlist(combined_list)
class(flat_list)
'character'
flat_list
- ‘ 1’
- ‘ 2’
- ‘ 3’
- ‘ 4’
- ‘ 5’
- ‘ 1’
- ‘ 2’
- ‘ 3’
- ‘ 4’
- ‘ 5’
- ‘ 一个’
- ‘ b’
- ‘ C’
- ‘ d’
- “ 与”
length(flat_list)
15
向量
文章图片
(资源)
向量是一个对象, 用于存储多个信息或相同数据类型的值。向量不能同时具有整数和字符。例如, 如果要存储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]
- 65
- 90
- 40
- 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]
- ‘ 一个’
- ‘ b’
- ‘ C’
char_num_vec <
- c(1, 2, "a")
char_num_vec
- ‘ 1’
- ‘ 2’
- ‘ 一个’
class(char_num_vec)
'character'
让我们借助切片概念创建具有1024个数值的向量。
vec <
- c(1:1024)
现在, 尝试访问中间元素和最后一个元素。为此, 你将使用长度功能。
vec[length(vec)]
1024
vec[length(vec)/2]
512
- 如何创建奇数向量?
seq(1, 10, by = 2)
- 1
- 3
- 5
- 7
- 9
文章图片
(资源)
与向量类似, 矩阵用于存储有关相同数据类型的信息。但是, 与矢量不同, 矩阵能够在其中保存二维信息。
定义矩阵的语法为:
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
AI | ML |
张量流 | 火炬 |
文章图片
(资源)
与矩阵不同, 数据帧是矩阵的更通用形式。它以表格形式包含数据。数据帧中的数据可以分布在具有不同数据类型的各个列中。第一列可以是字符, 而第二列可以是整数, 第三列可以是逻辑。
变量或特征采用柱状方式(也称为标头), 而观察结果按行排列, 第一个元素是行名, 后跟实际数据(也称为数据行)。
可以使用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
人 | 年龄 | 重量 | 高度 | 薪水 |
---|---|---|---|---|
< 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
人 | 年龄 | 重量 | 高度 | 薪水 | 人 | 年龄 | 重量 | 高度 | 薪水 |
---|---|---|---|---|---|---|---|---|---|
< 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(df1, 3) # here only three rows will be printed
人 | 年龄 | 重量 | 高度 | 薪水 | |
---|---|---|---|---|---|
< 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课程。
推荐阅读
- 如何安装SQL Server(详细步骤图解)
- Python中的虚拟环境
- R中的条件和控制流
- R中的实用程序
- Python Print()函数
- Python Range()函数
- Android-WebView加载网络图片&网页
- 使用maven的mybatis-generator代码生成器插件生成实体类mapper配置文件和mapper接口(使用idea)
- uniApp——v-for 动态class动态style