数据分析必备:掌握这个R语言基础包1%的功能,你就很牛了
导读:无论数据分析的目的是什么,将数据导入R中的过程都是不可或缺的。毕竟巧妇难为无米之炊。
utils包是R语言的基础包之一。这个包最重要的任务其实并不是进行数据导入,而是为编程和开发R包提供非常实用的工具函数。使用utils包来进行数据导入和初步的数据探索也许仅仅只是利用了utils包不到1%的功能,但这1%却足以让你在学习R语言时事半功倍。
作者:刘健 邬书豪
如需转载请联系大数据(ID:hzdashuju)
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个主要部分组成,具体说明如下。
data.frame
代表数据集在R中的呈现格式,这里指的是数据框格式,读者可以将其设想为常见的Excel格式。6 obs. of 6 variables
代表这个数据集有6个变量,每个变量分别有6个观测值。$ carrier
与其余带有“$”符号的函数均指变量名称。变量名称冒号后面的
Factor
和int
代表的是变量类型。这里分别是指因子型Factor
和整数型int
数据。另外还有字符型chr
、逻辑型logi
、浮点型dbl
(带有小数点的数字)、复杂型complex
等。因子型变量的后面还列出了各个变量的因子水平,也就是拥有多少个不同的因子。比如,出发地origin
后的3 levels就是表示其有3个因子水平。只是出发地是否属于因子类型的数据还有待商榷,而read.csv
默认将所有的字符型数据都读成了因子型。数据中的实际观测值。
str
函数在默认情况下会显示10行数据。使用str函数浏览导入的数据集可以让用户确定读取的数据是否正确、数据中是否有默认的部分、变量的种类等信息,进而确定下一步进行数据处理的方向。其他用来检视数据集的函数还有head
、tail
、view
等,另外,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.delimfunction (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/delim
比read.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则可以显示所保存的数据框属性、变量类型等信息。
因为函数默认的分隔符是空白(注意不是空格),所以应有的6个变量都被读在一列中。且默认的header
参数是假,所以数据变量被默认分配了一个新的变量名V1
,并且应为变量名称的这一行变成了观测值的第一行。将header设置为TRUE后的代码如下:
> flights <- read.table(file = "flights.csv",header = TRUE)
> head(x = flights)
表1-3中显示的是部分结果。
表1-3 read.table函数参数设置结果展示②
指定header
参数为真,分隔符sep参数为“,”后,变量名称才得以读取成应有的样子(如表1-4所示)。
> flights <- read.table(file = "flights.csv",header = TRUE,sep = ",")
> head(flights)
表1-4 read.table函数参数设置结果展示③
表1-4所示的数据框终于呈现了该有的样子。需要注意的,是因为字符数据因子化的参数还是默认设置,因此变量carrier
、tailnum
、origin
、dest
还是因子型。在实际练习或使用时,建议指定stringAsFactors = FALSE
。
以上读取的数据集都是规整的数据集,即每一行数据都有相同的观测值。不过在实际生活中,原始数据难免会存在空白行、空白值、默认值,或者某一行数据存在多余观测值却没有与之对应的变量名称,抑或元数据和原始数据在同一个文件中等各种问题。
这里暂且称这些问题数据集为不规则数据集,简单说就是,实际列的个数多于列名的个数。read.table
函数为这些问题准备了相应的参数。
1. 空白行
前文介绍过read.table
对于空白行的默认处理是跳过,这可以满足大部分常见数据的情况。不过在某些特殊情况下,例如,一个数据文件中同时存在两个或两个以上的数据集,那么保留空白行可能会有助于后续的数据处理。
表1-5演示的就是一个比较特殊的例子。空白行的上部是元数据,也即解释数据的数据,这里演示的是航空公司的缩写和全名的对照。空白行的下部是数据的主体部分,航班号、起始地缩写、起飞时间。这里保留空白行可有助于区分数据的不同部分。
表1-5 特殊类型文本数据文档
保留空白行的代码如下所示:
> airlines <- read.table(file = "airlines.csv", header = TRUE, sep = "\t", blank.lines.skip = FALSE, stringsAsFactors = FALSE)
> head(airlines, n = 8)
指定空白行保留的参数后,数据被成功读进R(表1-6)。
表1-6 read.table函数参数设置结果展示④
如此一来,不同的数据集就可以很容易地进行切割并归集到新的数据集中。可是,另外一个问题又出现了,函数按照第一部分的两列变量将后续的所有数据也都写入了两列。
这是因为read.table
会扫描文件中前五行的数据(包括变量名称)并以此为标准来确定变量数,airlines.csv
中开始的五行数据都只有两列,所以后续的数据也都强制读取成两列。
如果数据的第2~5行中存在任何一行拥有多于前面一行或几行的数据值,那么函数就会报错提示第一行没有相应数量的值。这种情况可以根据实际数据文件内容,用两种方式来处理,具体如下。
如果文件中开始的部分是暂时不需要的元数据,那么可以使用skip函数跳过相应的行数,只读取感兴趣的数据。
如果文件内容是一个整体,只是若干行数据具有额外的观测值。那么可以通过调整参数
col.names
或fill
和header
进行处理。
第一种情况比较容易,读者可以自行测试,在此略过。第二种情况需要知道数据中观测值个数的最大值,以用来补齐变量个数。因为已经知道airlines
文件的第二部分拥有6个变量,所以下面就来演示如何将6个变量名称指定成新的变量名(表1-7),代码如下:
> airlines <- read.table(file = "airlines.csv", header = FALSE, sep = "\t", stringsAsFactors = FALSE, col.names = paste0("V",1:6), blank.lines.skip = FALSE)
> head(airlines)
演示结果如表1-7所示。
表1-7 read.table函数参数设置结果展示⑤
小技巧:另外一个获取不规则数据集中所需变量个数的方法是利用报错信息。当不指定col.names参数,且原始数据的第2~5行中任一行有多于第一行的数据时,read.table会报错提示Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : line 1 did not have X elements, X即所需要的手动指定的变量个数。
这里使用paste0
来创建新的变量名称。paste0
可以理解为胶水函数,用于将需要的字符串粘合在一起。这里演示的意思是创建6个以V
开头,从V1到V6的字符串作为变量名。这种处理方式足以应付平时练习用的小型数据集(比如,只有几行到几十行数据的数据集)。
但是在处理实际工作中成百上千行的数据时,这种手动指定变量个数的方法就显得笨拙而低效了。下面的代码演示了如何实现自动检测数据集所需的变量数:
> number_of_col <- max(count.fields("airlines.csv",sep = "\t"))
> airlines <- read.table(file = "airlines.csv", header = FALSE, sep = "\t", stringsAsFactors = FALSE, col.names = paste0("V",seq_len(number_of_col)), blank.lines.skip = FALSE)
> head(airlines)
部分结果展示如表1-8所示。
表1-8 read.table函数参数设置结果展示⑥
count.fields
/max
/seq_len
这三个函数的配合使用实现了如下功能。
count.fields
用于自动检测数据集中每一行数据的观测值个数,max
用于找出count.fields
输入结果中的最大值,seq_len
用于以最大值为参照生成1到最大值的整数序列,胶水函数paste0
用于定义变量名称。
因为R基于向量计算的特性,因此这种函数之间简单的配合使用很常见也很有效。所以希望小伙伴们在以后的练习或实际工作中,多思考,尽量使用这样的组合来提高代码的效率、简洁性和可重复性。
使用参数fill和header也可以读取不规则数据集。需要注意的是,采用这种方法是有前提条件的,即原始数据第2~5行实际列的个数应大于列名。代码如下:
> flights_uneven <- read.table("airlines.csv", header = FALSE, sep = "\t", stringsAsFactors = FALSE, fill = TRUE)
> head(flights_uneven)
上述代码的演示结果如表1-9所示。
表1-9 read.table函数参数设置结果展示⑦
2. 默认值、空白
一个数据集里出现默认值(NA)或空白(“”)的情况十分常见,两者之间的区别需要根据不同的实际情况来确定。理论上来讲,默认值仍是数据观测值的一种,虽然在原始数据中其可能与空白一样没有显示,但是它可以通过其他手段来进行补齐。
而空白有可能并不是数据,比如在上面的演示中,V3
至V6
列,1~5行都是空白,这些空白不属于任何实际数据变量,是真正的空白,因而不能说这些空白是默认值。
默认值和空白的处理完全可以独立成书,因为相关内容已经超出了本文的范围,所以这里不再过多讨论。下面只演示在导入数据的过程中,如何进行简单的默认值、空白预处理,代码如下:
> flights_uneven <- read.table(file = "flights_uneven.csv", header = FALSE, sep = "\t", stringsAsFactors = FALSE, fill = TRUE, na.strings = c(""))
> head(flights_uneven)
表1-10中展示了处理后的部分数据值。
表1-10 read.table函数参数设置结果展示⑧
第七列中的数据在指定将空白替换成“NA”之后,原有的空白位置被写入了“NA”,也就是说第七列的空白属于数据的一部分。根据实际情况,也可以将多余的数据部分或全部替换成“NA”(如表1-11所示),以方便后续的处理及分析,代码如下:
> flights_uneven <- read.table("flights_uneven.csv",sep = "\t", stringsAsFactors = FALSE, fill = TRUE,header = FALSE, na.strings = c(paste0("测试",1:3),""))
> head(flights_uneven)
替换结果如表1-11所示。
表1-11 read.table函数参数设置结果展示⑨
当数据集行数较多,无法轻易地鉴别出某一列到底有多少个观测值需要赋值为“NA”的时候,可以配合unique
函数进行处理。处理的思路是先将数据读取到R中,然后使用unique
函数找到指定列中的非重复观测值,选取指定观测值并保存到一个向量内,然后将向量指定给na.strings
参数来进行替换,代码如下:
> flights_uneven <- read.table("flights_uneven.csv",sep = "\t", string-sAsFactors = FALSE, fill = TRUE, header = FALSE)> replace <- unique(flights_uneven$V7)
replace[1] "" "测试1" "测试2" "测试3"> flights_uneven <- read.table("flights_uneven.csv",sep = "\t", stringsAsFactors = FALSE, fill = TRUE,header = FALSE, na.strings = c(replace[c(1,3)]))> head(flights_uneven)
替换结果如表1-12所示。
表1-12 read.table函数参数设置结果展示⑩
第一次读取数据是为了获得需要替换的观测值,第二次读取则是将需要替换成“NA”的观测值指定给相应参数。因为replace
是一个字符串向量,所以可以使用“[”按位置选择其中的值,当然也可以不选择任何值,直接全部替换。
小知识:“[”是baseR中Extract的一种,在R的使用过程中,这是必须掌握和理解的函数之一。
关于作者:刘健,资深R语言技术专家,数据科学工程师。在新西兰皇家植物与食品研究院工作,参与一项国际和两项国家的级别研究项目,使用R语言开发完成气象数据自动提取和模型文件自动化工具。独立开发完成R语言程序包一个。
邬书豪,资深R语言用户和数据分析工程师,是数据科学领域10万粉丝的知名公众号人工智能爱好者社区的负责人,公众号文章阅读量破百万。喜欢用SQL、R和Python解决工作中的数据科学问题,致力于成为一名有深度行业实践经验积累的数据科学家。
本文摘编自《R数据科学实战:工具详解与案例分析》,经出版方授权发布。
延伸阅读《R数据科学实战:工具详解与案例分析》
点击上图了解及购买
转载请联系微信:DoctorData
推荐语:这是一部能指导零基础的读者快速掌握R语言并利用R语言进入数据科学领域的著作。两位作者在R语言和数据科学领域有丰富的实践经验,首先是非常有针对性地讲解了利用R语言进行数据处理需要掌握和使用的6大类17种工具,然后是结合这些工具的使用给出了5个典型的综合性案例,帮助读者迅速将理论与实践融会贯通。
开学季满减福利进行中
长按小程序码发现更多好书
「大数据」内容合伙人之「鉴书小分队」上线啦!
最近,你都在读什么书?有哪些心得体会想要跟大家分享?
数据叔最近搞了个大事——联合优质图书出版商机械工业出版社华章公司发起鉴书活动。
简单说就是:你可以免费读新书,你可以免费读新书的同时,顺手码一篇读书笔记就行。详情请在大数据公众号后台对话框回复合伙人查看。
有话要说?
Q: 你用过哪些R语言包?
欢迎留言与大家分享
猜你想看?
包教包会,7段代码带你玩转Python条件语句
学霸们在假期里“偷着学”,看的是这些书
从图灵机、图灵测试到人工智能:什么决定了AI能否取代人类?
从概念到应用,终于有人把数据挖掘讲明白了
更多精彩?
在公众号对话框输入以下关键词
查看更多优质内容!
PPT | 报告 | 读书 | 书单 | 干货
大数据 | 揭秘 | Python | 可视化
AI | 人工智能 | 5G | 区块链
机器学习 | 深度学习 | 神经网络
合伙人 | 1024 | 段子 | 数学 | 高考
据统计,99%的大咖都完成了这个神操作
?
觉得不错,请把这篇文章分享给你的朋友
转载 / 投稿请联系:baiyu@hzbook.com
更多精彩,请在后台点击“历史文章”查看
点击阅读原文,了解更多
数据分析必备:掌握这个R语言基础包1%的功能,你就很牛了相关推荐
- 数据分析必备:掌握这个R语言基础包1%的功能让你事半功倍!(附代码)
来源:大数据 本文约7100字,建议阅读15分钟. 本文介绍了utils包在R语言基础的用途. [ 导读 ]无论数据分析的目的是什么,将数据导入R中的过程都是不可或缺的.毕竟巧妇难为无米之炊.util ...
- R语言基础包中的绘图函数——快速用R探索数据
library(ggplot2)#R语言中的基础包所带的绘图函数虽然用起来相对ggplot2包不是那么友好 #但在刚拿到原始数据时进行快速探索还是很方便的####散点图 #运用plot()函数,向函数 ...
- R语言基础知识-学习笔记汇总
B站课程:生信必备技巧之R语言基础教程全集的代码笔记 1.R语言包安装 rm(list = ls()) # 设置镜像: options()$repos options()$BioC_mirror #o ...
- FigDraw 2. SCI 文章绘图必备 R 语言基础
点击关注,桓峰基因 桓峰基因 生物信息分析,SCI文章撰写及生物信息基础知识学习:R语言学习,perl基础编程,linux系统命令,Python遇见更好的你 70篇原创内容 公众号 关注公众号,桓峰基 ...
- R语言explore包进行探索性数据分析实战(EDA、exploratory data analysis):基于iris数据集
R语言explore包进行探索性数据分析实战(EDA.exploratory data analysis):基于iris数据集 目录
- r语言各形状编号_190+张图片!吐血整理!搞定R语言基础绘图全部知识点
转自:生信宝典|Bio_Data,不一样的生信学习平台 原文链接:ggplot2高效实用指南 (可视化脚本.工具.套路.配色) 作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语 ...
- R语言基础入门(全)
R 是门语言,也是个环境.个人认为R有点像matlab. R自带多种统计学及数字分析功能.R的功能也可以通过安装包(Packages,用户撰写的功能)增强,个人感觉这个就是插件.因为S的血缘,R比其他 ...
- [置顶]R语言 ggplot2包
R语言 ggplot2包的学习 分析数据要做的第一件事情,就是观察它.对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测? ggplot2图形之基本语法: ggplot2的核心理念是将绘图 ...
- 时间序列——R语言基础
这里只提及到了R语言的最皮毛的应用,其实ts是重点提及的,因为他是专门为了时间序列设计的内置class,但ts还是太浅显了,故一定要看以下链接. zoo的使用 xts的使用 以上链接涉及到了zoo与x ...
最新文章
- MFC底层窗口的实现
- 为HTML5的未来制定学习计划
- 文治者必有武备不然长大了挨欺负_“有文事者必有武备,有武备者必有文事。”出自司马迁的《史记》。...
- 2018年最实用的6个机器学习项目
- Python实现图像空域随机水印加入与提取
- 生意做到一定规模,老板想面面俱到,亲力亲为就不可能了
- mysql 5.7 创建用户_MySQL 5.7 创建用户并授权
- Konckout第五个实例:各种事件绑定
- 利用SQL语言修正与撤销数据库
- mysql存储过程事务和捕获异常信息
- Android实现图片(拍照+相册)上传功能
- 前沿讲座之计算机图形学
- vue实现公告上下滚动
- English Learning - L1-2 窥得大段表达门径 2022.12.8 周四
- imageJ基本操作
- FAST2022 DEPART: Replica Decoupling for Distributed Key-Value Storage Qiang(翻译分析)
- 编程速记(39):Matlab篇-提取图像高频/低频信息-基于DCT
- Youtube-dl 和 ffmpeg 常用命令
- 2022年8月国内外数据库排名
- InDesign 教程:如何对齐和分组内容?
热门文章
- Redis工作笔记-Set类型
- Qt工作笔记-获取选中的文件名(lastIndexOf的使用)
- C++工作笔记-stl中map基础用法(插入,遍历,删除)
- C/C++ OpenCV高斯滤波
- 工科计算机考研311分今年能上吗,2020年考研,工科345分,能进大连理工吗?学姐:热门专业悬...
- oracle中如何加字母,Oracle数据库之oracle数据库表插入数据的时候如何产生一个字母+数字...
- python 双向循环链表实现_python实现双向循环链表基本结构及其基本方法
- aaynctask控制多个下载进度_使用 Python 下载的 11 种姿势,一种比一种高级
- C语言获取某个分割符之前的内容
- 计算机网络之数据链路层:4、流量控制和可靠传输机制(停止等待协议、后退N帧协议、选择重传协议)