伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

数据分析必备:掌握这个R语言基础包1%的功能,你就很牛了

来源:本站原创 浏览:100次 时间:2022-04-25


01 read.csv/csv2:逗号分隔数据读取


.csv可能是目前最常见的平面文件类型了。它代表的是comma-separated values,简单来讲就是,文件里每一个单独的数据值都是用逗号进行分隔的。


.csv只是text file(文本文件)的一种,文本文件在微软的Windows操作系统中常以拓展名为.txt的形式呈现。文本文件可以使用各种符号来分隔数据值,例如常见的tab和“;”(分号),或者其他任意��ñ,����符号。即便是以.csv为拓展名的文件也并非一定是以逗号进行分隔的,相关内容在后文的函数演示部分会有介绍。


文件的拓展名并非必须,熟悉Linux系统的读者可能接触过很多无拓展名的文件。处理无拓展名的文本文件数据时,最简单的办法就是使用data.table包中的fread函数。


utils里的read.csv/csv2是专门用于设置快速读取逗号分隔(read.csv)或是分号分隔(read.csv2)。也就是说,在事先了解数据值分隔符号的情况下,这两个函数对分隔符和其他一些参数的默认设置会使数据导入的部分更加简单和快捷。


有一点需要特别注意,即这两个函数对小数点的处理:前者默认的小数点是“.”,后者默认的小数点是“,”。这只是因为不同国家技术人员对数据值分隔符的见解或者好恶不同而造成的。


万里长征第一步,我们先来看read.csv最简单的使用方式,代码如下:


> flights <- read.csv(file = "flights.csv")


此行代码可以解读为使用read.csv从工作空间读取文件flights.csv,然后将数据集保存到flights中,其他所有参数都使用默认值。因为flights.csv文件已经在R的工作路径里,所以此处免去了设置work directory


这里希望读者能够自行探索使用.rproj(R项目—将每一次数据分析的过程都看作一个独立的项目)来对每一个独立的数据分析工作进行分类和归集。该方法不仅免去了设置路径的麻烦,也减少了因原始数据文件太多而可能导致的各种隐患。


小知识:函数在执行的时候可以依照其默认设置的参数位置来执行,也就是说,用户无须指定每一个参数的名称,只需按照位置顺序来设定参数值即可。比如,read.csv中的file参数名就可以省略,只要第一位是读取文档的目标路径和文件名就可以。


数据文件被读取到R工作环境中的第一步通常为调用str函数来对该数据对象进行初步检视,下面的代码列出了该函数最简单的使用方式。


    > str(object = flights)
    'data.frame':   6 obs. of  6 variables:
$ carrier : Factor w/ 4 levels "AA","B6","DL",..: 4 4 1 2 3 4
$ flight  : int  1545 1714 1141 725 461 1696
$ tailnum : Factor w/ 6 levels "N14228","N24211",..: 1 2 4 6 5 3
$ origin  : Factor w/ 3 levels "EWR","JFK","LGA": 1 3 2 2 3 1
$ dest    : Factor w/ 5 levels "ATL","BQN","IAH",..: 3 3 4 2 1 5
$ air_time: int  227 227 160 183 116 150


str函数可用于检视读取数据结构、变量名称等。这里同样也只指定了一个非默认参数,其他参数全部都为默认值。str的输出结果由5个主要部分组成,具体说明如下。


  1. data.frame代表数据集在R中的呈现格式,这里指的是数据框格式,读者可以将其设想为常见的Excel格式。

  2. 6 obs. of 6 variables代表这个数据集有6个变量,每个变量分别有6个观测值。

  3. $ carrier与其余带有“$”符号的函数均指变量名称。

  4. 变量名称冒号后面的Factorint代表的是变量类型。这里分别是指因子型Factor和整数型int数据。另外还有字符型chr、逻辑型logi、浮点型dbl(带有小数点的数字)、复杂型complex等。因子型变量的后面还列出了各个变量的因子水平,也就是拥有多少个不同的因子。比如,出发地origin后的3 levels就是表示其有3个因子水平。只是出发地是否属于因子类型的数据还有待商榷,而read.csv默认将所有的字符型数据都读成了因子型。

  5. 数据中的实际观测值。str函数在默认情况下会显示10行数据。使用str函数浏览导入的数据集可以让用户确定读取的数据是否正确、数据中是否有默认的部分、变量的种类等信息,进而确定下一步进行数据处理的方向。其他用来检视数据集的函数还有headtailview等,另外,Rstudio中的Environment部分也可以用于查看目前工作环境中的数据框或其他类型的数据集。


前文提到过,.csv并非一定是以逗号进行分隔。如果遇到以非逗号分隔数据值的情况,加之未指定分隔符(例如,运行read.csv读取以Tab分隔的文件),就会出现下面的情况:


    > flights1 <- read.csv(file = "flights1.csv")
    > str(object = flights1) 
    'data.frame':   6 obs. of  1 variable:
$ carrier.flight.tailnum.origin.dest.air_time: Factor w/ 6 levels "AA\t1141\tN619AA\tJFK\tMIA\t160",..: 4 6 1 2 3 5


小技巧:指定(assgin)符号“<-”的快捷键是“alt”加“-”(短划线)。Rstudio快捷键参照表可以通过“alt+K”来查看详细内容。


由代码可知,read.csv函数将所有数据都读取到了一列中。因为按照默认的参数设置,函数会寻找逗号作为分隔列的标准,若找不到逗号,则只好将所有变量都放在一列中。指定分隔符参数可以解决这个问题。将\t(tab在R中的表达方式)指定给sep参数后再次运行read.csv读取以Tab分隔的csv文件,代码如下:


    > flights3 <- read.csv(file = "flights1.csv", sep = "\t")
    > str(flights3) 
    'data.frame':   6 obs. of  6 variables:
$ carrier : Factor w/ 4 levels "AA","B6","DL",..: 4 4 1 2 3 4
$ flight  : int  1545 1714 1141 725 461 1696
$ tailnum : Factor w/ 6 levels "N14228","N24211",..: 1 2 4 6 5 3
$ origin  : Factor w/ 3 levels "EWR","JFK","LGA": 1 3 2 2 3 1
$ dest    : Factor w/ 5 levels "ATL","BQN","IAH",..: 3 3 4 2 1 5
$ air_time: int  227 227 160 183 116 150


根据实际情况不同,字符型数据有时会是因子,有时不会。如果使用read.csv默认的读取方式,那么字符型全因子化会对后续的处理分析带来很多麻烦。所以最好是将字符因子化关掉。stringsAsFactors参数就是这个开关,示例代码如下:


    > flights_str <- read.csv(file = "flightsstrings.csv", sep = "\t", stringsAsFactors = FALSE)
     > str(object = flights_str)
    'data.frame':   6 obs. of  6 variables:
$ carrier : chr  "UA" "UA" "AA" "B6" ...
$ flight  : int  1545 1714 1141 725 461 1696
$ tailnum : chr  "N14228" "N24211" "N619AA" "N804JB" ...
$ origin  : chr  "EWR" "LGA" "JFK" "JFK" ...
$ dest    : chr  "IAH" "IAH" "MIA" "BQN" ...
$ air_time: int  227 227 160 183 116 150




02 read.delim/delim2:特定分隔符数据读取


read.delim/delim2这两个函数是专门用来处理以tab分隔数据的文件的,delim可用来读取小数点是“.”的数据,delim2则用来处理小数点是“,”的数据,所以这两个函数与read.csv/csv2唯一不同的就只是参数sep = "\t"


聪明的你很可能已经想到了如果使用这两个函数的默认设置来读取以逗号分隔的数据会发生什么。函数的默认参数会在原始数据中不断地寻找tab分隔符,找不到的话就会如同前文演示的那样,将所有变量都挤在一列里。read.delim/delim2的示例代码如下:


    > read.delim
    function (file, header = TRUE, sep = "\t", quote = "\"", dec = ".", 
    fill = TRUE, comment.char = "", ...) 
read.table(file = file, header = header, sep = sep, quote = quote, 
    dec = dec, fill = fill, comment.char = comment.char, ...)
<bytecode: 0x000000001a28a710>
<environment: namespace:utils>


无论是read.csv还是read.delim,帮助文档中的参数格式都是相同的。从上面的代码结果中可以看出,read.delim执行的其实,是函数read.table


其实,这4个函数(read.csv/read.csv2/read.delim/read.delim2)都只是它们的母函数read.table的变形罢了。这样做的原因有可能是因为在RStudio出生之前,read.csv/delimread.table更容易记住,也有可能只是Henrik Bengtsson(utils包的笔者)觉得这样做很酷。具体是什么原因已经不再重要,会用这些函数才是第一要务。



03 read.table:任意分隔符数据读取


read.table函数会将文件读成数据框的格式,将分隔符作为区分变量的依据,把不同的变量放置在不同的列中,每一行的数据都会对应相应的变量名称进行排放。以下简要列出了read.table函数中主要参数的中英文对照。


函数read.table实用参数及功能对照:


  • file:数据文件路径+文件名,也可以是一个url,或者是文字数据 

  • header:设置逻辑值来指定函数是否将数据文件的第一列作为列名。默认为假

  • sep:不同变量之间的分隔符,特指分隔列数据的分隔符。默认值为空,可以是“,”、“\t”等

  • quote:单双引号规则的设置。如果不希望设置该参数,则需要指定其为空:quote = ""

  • dec:用作小数点的符号,一般为句点或者逗号

  • row.names:行名。可以通过指定一组向量来进行设置。如果文件中的第一行比数据整体的列数量少一时,则会默认使用第一列来作为行名

  • col.names:列名。可以通过指定一组向量来进行列名设置

  • na.strings:对默认值的处理

  • colClasses:变量类型的设置。通过指定一组向量来指定每列的变量数据类型,具体使用方式为:colClasses  = c ("character","numeric",…)

  • fill:设置逻辑值来处理空白值部分,使用方法请参见代码演示部分

  • strip.white:设置逻辑值来处理空白列。某些数据文件内可能会预留一些变量列,但数据采集后这些预留的列并未被填满,而是仍然保留着制表符,该参数就是用来处理掉这些意义不大的制表符

  • blank.lines.skip:空白行是否跳过,默认为真,即跳过

  • stringsAsFactors:字符串是否作为因子,推荐设置为否

  • skip:跳过几行读取原始数据文件,默认设置为0,表示不跳过任何一行,从文件第一行开始读取,可以传参任意数字


以上这些参数已足以应付读取日常练习所用的规整的数据文件,例如,教授布置的统计作业中的原始数据集,各种传感器输出的.csv文件等。下面的代码及运行结果演示非常简单,使用read.table读取上一节中的第一个数据集,实现思路是每次只增加一个read.table函数中的参数。代码如下:


> flights <- read.table(file = "flights.csv")
> head(x = flights)


表1-2展示了所有参数均为默认设置的部分结果。


  • 表1-2 read.table函数参数设置结果展示①



小提示:上面的演示代码中使用了head函数,该函数可以按照人们习惯的方式将数据框按照自上而下的方式显示出来,而不是像str函数那样从左向右展示。一般在做初步数据检视的时候,推荐两个函数都运行,作为互补。head方便与原始数据文档进行比对,而str则可以显示所保存的数据框属性、变量类型等信息。


  • 上一篇: 包教包会,7段代码带你玩转Python条件语句
  • 下一篇: 身高2m,体重2kg,这样的数据“看上去很好”?
  •   推荐站点

    • At-lib分类目录At-lib分类目录

      At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

      www.at-lib.cn
    • 中国链接目录中国链接目录

      中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

      www.cnlink.org
    • 35目录网35目录网

      35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

      www.35mulu.com
    • 就要爱网站目录就要爱网站目录

      就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

      www.912219.com
    • 伍佰目录伍佰目录

      伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

      www.wbwb.net