R语言实战 | 新手福利~认识数据集的内在

"R实战"专题·第4篇

编辑 | 科白君

本期推送内容

按个人的要求来创建含有研究信息的数据集,这是任何数据分析的第一步。同时,这也是学习R语言过程重要的入门环节。特别是初学过程,更多的是模仿学习。由于不理解数据结构,导致无法正确模仿数据格式并无法正常运行代码。因此,本期介绍R语言的基础内容:数据集概念数据结构数据输入导出。主要讲解相应内容的R包及函数使用,希望大家学习后能解决以下问题:1) 数据集有哪些类型的变量组成;2) 清楚数据集的数据结构;3) 读取各类型文件的数据;4) 成功导出所需要的数据。

想学习R语言的朋友可以持续关注微信公众号:科白君的土壤世界


一、数据集的概念

数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量。在R中,数据集包括以下两步:1)选择一种数据结构来储存数据;2)将数据输入或导入到这个数据结构中。另外,R主要可处理的数据类型包括数值型、字符型、逻辑型(TRUE or FALSE)、复数型(虚数)和原生型(字节)。

二、数据结构的类型

R拥有许多用于存储数据的对象类型,包括标量、向量、矩阵、数组、数据框和列表。它们在储存数据的类型创建方式结构复杂度,及定位和访问其中某元素的方法等均有所差异。接下来一一介绍。

1)标量

与C语言不同,R语言中,单个数据(标量)没有单独的数据类型,它只是向量的一种特例,标量以单元素向量的形式出现。标量是只含一个元素的向量,例如f <- 3、g <- "US"和h <- TRUE。它们用于保存常量。因此,R中最基本的数据类型是向量。

2)向量

向量是用于存储数值型、字符型或逻辑型数据的一维数组。执行组合功能的函数c()可用来创建向量。例如:

我们可以使用a[c(2, 4)]访问向量a中的第二个和第四个元素。此外,我们具体看下面例子:

3)矩阵

矩阵是一个二维数组,只是每个元素都拥有相同的数据类型(同上三种)。可用函数matrix()创建矩阵。

我们可以使用下标和方括号来选择矩阵中的行、列或元素。x[i, ]指矩阵中x中的第i行,x[i, j]指第i行第j个元素。选择多行或多列时,下标i和j可为数值型向量。For example:

4)数组

数组(array)与矩阵类似,但纬度可以大于2。数组可以用array函数构建,例如:

### vector包含数组中的数据,dimen.是数值型向量,给出各维度下标的最大值,而dimnames是可选的、各维度名称标签的列表。

5)数据框

由于不同的列包含不同类型的数据,数据框的概念较矩阵来说更一般。通常数据框是R中最常处理的数据结构。数据框可通过函数data.frame()创建:

具体例子:

关于选取数据框中的元素的方式有很多种,我们可以使用矩阵中的方括号标记法,也可直接指定列名:

6)因子

类别(名义型)变量和有序类别(有序型)变量在R中称为因子(factor)。因子在R中非常重要,因为它决定了数据的分析方式以及如何进行视觉呈现。例如:

7)列表

列表(list)是R的数据类型中最为复杂的一种。通常,列表就是一些对象或成分的有序集合。列表允许你整合若干对象到单个对象名下。例如,某个列表中可能包含若干向量、矩阵、数据框,甚至其他列表的组合。可用list()函数构建列表:

具体例子:

提取数据:

三、数据的输入

使用R进行数据分析的时候,首先要导入数据。R语言支持的数据类型很多,包括、excel文件csv文件txt文件等。很多人初学者甚至还没开始就已经对R语言放弃了,正是倒在了数据导入这一步。下面给大家提供几种常见的数据导入方法。

1)使用键盘手动输入数据

有两种常见的方式:用R内置的文本编辑器和直接在代码中导入数据。首先,利用文本编译器。

R中的函数edit()自动调用一个手动输入数据的文本编译器。步骤如下:

①创建一个空的数据框/矩阵,其中变量名和变量的类型需与理想中的最终数据集一致;

②针对这个数据对象调用文本编译器,输入数据,并将结果保存回此数据对象。

例子:先创建一个名为data的数据框,含有三个变量:数值型,字符型和数值型。然后使用文本编译器,键入数据,最后保存结果。

通过edit()函数调用出数据编辑器,如下图

R软件弹出数据编辑器后,我们就可以点击第四列格子进行变量的定义。例如这里点击"var4"后,就会弹出一个编辑器,这里我们就可以对变量的变量名和类型(数值,字符)进行定义。

定义好变量后,可以进行手动输入数据。不过这种方式只适合少量的数据输入,当数据量比较大时,建议使用其他的方式导入数据。

此外,可以直接在程序中嵌入数据集,例如:

2)使用函数导入数据(主要以excel文件格式为主

①导入csv或txt文件,使用基础的read.table()函数导入数据。另外,也可以使用read.csv()函数。该函数可以读入一个表格格式的文件并保存为一个数据框。基本的语法表达式:

主要的参数理解:

file:文件路径(注意:Windows路径要用斜杠 " / " or双反斜杠 " \\ ")。

header:默认为FALSE,即数据框的列名默认系统自带的V1,V2...Vn,为TRUE时第一行作为每列的列名。

sep:分隔符,默认为空格,可以设置为逗号(comma) sep=",",分号(semicolon) sep=" ; "及制表符(tab)。

row.names:是可选参数,表示行标识符的变量。当row.names=1时表示第一列作为每一行的行名,当row...=2时,表示第二列,数字表示某一列。特别是,该参数使用的时候,该列中不能存在重复名,否则报错。

具体:

②导入excel文件,需要用到R包library(xlsx),可以直接导入Excel工作表。但是要确保第一次使用前先进行下载和安装。同时也需要xlsxJars和rJava包还有openxlsx包,及一个正常工作的Java安装(http://java.com)。优势:一个文件夹存储多个sheet,数据读取的时候不需要新建多个文件。基本的语法表达式:

主要的参数理解:

file:文件路径(注意:Windows路径要用斜杠 " / "or双反斜杠 " \\ ")。

sheet:n表示xlsx格式下,不同sheet的表格。n=1表示读取第一个sheet,以此类推。特别是,如果漏写n会报错。

具体过程:

四、数据的导出

通常在分析时候,我们需要用到计算后的结果,需要把计算的结果导出。这里我们常用到的函数有write.table,write.csv来导出txt,csv格式的文件。另外,write.xlsx用来导出xlsx格式的文件。这里,我们选择最基础的write.table的语法表达式进行介绍,剩下的导出方式建议大家用help()函数进行查阅或 ?函数名进行查阅:

x:需要导出的数据,这里是指前面赋值过的数据。

file:导出的文件路径。

sep:分隔符,默认为空格(" "),也就是以空格为分割列。

row.names:是否导出行序号,默认为TRUE,也就是导出行序号。

col.names:是否导出列名,默认为TRUE,也就是导出列名。

quote:字符串是否使用引号表示,默认为TRUE,也就是使用引号表示。

例如:将数据框C输出为.csv文件

Tips:

1. 单个向量中的数据必须拥有相同的类型或模式(数值型、字符型或逻辑型),同一向量中无法混杂不同类型的数据。

2. 矩阵都是二维的,与向量相似,仅能包含一种数据类型。超过二维时,考虑使用数组。当数据为多种类型时,可考虑使用数据框。

3. 另外,在已经构建好的数据框里,除了通过edit()能够编辑,fix()函数也可以编辑数据框里的数值型和字符型变量。

4. write.table / read.table 既可以读取txt文件也可以导入csv格式的文件。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容