随笔分类 - R
摘要:R 中有大量的内置数据集。它们可以很容易地被加载并投入使用,主要用于演示和测试。内置数据集主要是以数据框的形式进行存储,它们都附有详细的介绍。例如,iris 和 mtcars 是 R 中最有名的数据集。可以用?iris 和?mtcars 分别查看这两个数据集的描述。通常,这些描述是很具体的——它不仅
阅读全文
摘要:在前面的章节中,我们已经介绍了 CSV 文件和 Excel 工作簿的读写函数。这些不是 R 的原生数据格式,也就是说,原始数据对象和输出文件之间有所不同。例如,我们想把一个数据框导出为 CSV 格式,其中,这个数据框有很多具有不同的数据类型的列。那么,在导出过程中,列的类型会被丢失。无论是数字、字符
阅读全文
摘要:导入诸如 CSV 之类文本格式的数据的优点是不需要依靠某些特定软件来读取数据,并且文件具有可读性,即软件中性。然而,它的缺点也很明显——我们不能直接对文本编辑器中的数据执行计算操作,因为这些内容是纯文本格式的。Excel 工作簿是另一种存储表格数据的常用格式。一个 Excel 工作簿可以包含一个或多
阅读全文
摘要:在所有用于存储数据的文件类型中,CSV 可能是使用最广泛的。在标准 CSV 文件中,第 1 行是列的标题,后面每行都代表了一条数据记录,每列之间用逗号分开。下面就是一个用 CSV 格式编写的学生记录的例子:Name,Gender,Age,MajorKen,Male,24,FinanceAshley,
阅读全文
摘要:在前面的章节中,我们已经学习了用于基本对象操作的多类内置函数,并且知道了如何获取对象的类、类型和维度;如何进行逻辑、数学和基本统计计算;以及如何完成像根查找这样的简单分析任务。这些函数是我们解决特定问题的基石。字符串相关函数是一类非常重要的函数,本章将介绍这些函数。在 R 中,文本存储在字符向量中,
阅读全文
摘要:基于研究需要,我们可能要从公开网页或需要认证的数据库中下载数据。这些数据源提供的数据格式多种多样,而且大多数数据都被规范地整理在一起。例如,许多经济、金融数据库提供 CSV 格式的数据,这是一种支持非常广泛、用于表示表格数据的文本格式。一个典型的 CSV 格式看起来如下:id,name,score1
阅读全文
摘要:现在我们回头看看本节最开始遇到的那个问题。解决方法和水果例子完全相同,找到模式,然后分组。首先,看一下原始数据中典型的一行:2014-02-01,09:20:29,Ken,James,Hey, how are you?显然,每一行都具有相同的格式,也就是日期、时间、发送者、接收者、信息,并且用逗号隔
阅读全文
摘要:在字符串模式中,我们使用括号对想要从文本中提取的部分做标记。在这个问题中,我们修改模式为:(\w+):\s(\d+),其中有两组被标记:一个是通过"\w+"匹配的水果名,另一个是通过"\d+"匹配的水果数量。现在我们用改进后的模式来提取想要的信息。尽管 R 的内置函数已经完全能够胜任这项工作,我仍然
阅读全文
摘要:为了解决这个问题,计算机无需真正理解水果是什么。我们只需要找到一个能描述需要的模式即可。字面上,我们想要找到所有以一个单词开始,然后一个分号和一个空格,最后以一个整数而不是单词或者其他符号结尾的行。 正则表达式提供了一系列用于表示模式的符号。上述模式可以被描述成^\w+:\s\d+$,其中的元符号(
阅读全文
摘要:在数据分析中,常常会遇到日期和时间类型数据。与日期相关的最简单的函数可能是:Sys.Date( )返回当前日期;Sys.time( )返回当前时间。 当本书被渲染出来的时候,打印出来的日期如下:Sys.Date()## [1] "2017-02-09"时间是:Sys.time()## [1] "20
阅读全文
摘要:在前面的章节中,我们学习了如何将字符串转换为日期和日期/时间对象。在这一节中,将会学到相反的操作:根据特定的模板将日期和日期/时间对象转换回字符串。一旦创建了一个日期对象,每次打印时,它总是以标准格式表示: my_date## [1] "2016-02-10"我们可以使用 as.character(
阅读全文
摘要:我们可以根据初始值创建一个自定义日期:as.Date(1000, "1970-01-01")## [1] "1972-09-27"在更多的情况下,我们通过标准的文本格式来创建时间和日期:my_date <- as.Date("2016-02-10")my_date## [1] "2016-02-10
阅读全文
摘要:R 中的字符向量被用来存储文本数据。不同于其他编程语言的是,R 中字符向量并非单个字符、字母或者字母符号如 a、b、c。相反,它是一个包含字符串的向量。R 也提供了许多用来处理字符向量的内置函数。其中很多可以执行向量化操作,因此它们可以一步完成对多个字符串的处理。在本节中,你将学到更多有关字符向量中
阅读全文
摘要:sprintf( )函数很强大,但并非适用于所有应用场景。例如,如果一些部分在模板中多次出现,那么就需要多次写一样的参数。这通常会使得代码冗长而且难以修改:sprintf("%s, %d years old, majors in %s and loves %s.", "James", 25,"Phy
阅读全文
摘要:有时候使用 paste( )连接文本并不是一个好主意,因为文本不得不被分离成多个小段,而且随着格式越来越长,也会变得难以阅读。举个例子,假设我们需要按以下格式打印出 students_df 中的每条记录:#1, name: Tony, age: 26, major: Physics在这种情况下,使用
阅读全文
摘要:许多情况下我们需要把文本转换为其他形式,所幸,对文本进行多种形式的转换并非难事。1.转换大小写当我们处理文本数据时,输入可能不符合我们设定的标准。例如,我们希望所有产品都用大写字母(从 A~F)进行分级,但实际输入的字母可能既有大写也有小写。转换大小写有利于确保输入的字符串在大小写上保持一致。tol
阅读全文
摘要:在实践中,我们经常需要将多个字符串连接成一个。paste( )函数就是用来连接多个字符向量的函数。这个函数也使用空格作为默认分隔符:paste("Hello", "world")## [1] "Hello world"paste("Hello", "world", sep ="-")## [1] "
阅读全文
摘要:也许查看文本是我们对文本所能做的最基础的事情。R 提供了许多在控制台中查看文 本的方式。最简单的方式是,直接在引号中输入文本:"Hello"## [1] "Hello"如同由浮点数组成的数值向量,一个字符向量是一个由字符值或字符串组成的向量。Hello 是我们刚刚创建的字符向量中的第 1 个,也是唯
阅读全文
摘要:在前面的章节中,我们已经学习了如何创建几种基本类型的对象,包括用来存储数据的原子向量、列表和数据框,以及如何创建函数来表达程序逻辑。在此基础上,我们掌握了利用不同类型的表达式来控制涉及基本对象的逻辑流。现在,我们越来越熟悉基本术语和 R 编程语言的语法。鉴于此,可以创建一个使用内置函数处理基本对象的
阅读全文
摘要:apply 函数将一个函数应用到矩阵或数组的某个边际( margin )或维度上。例如,计算矩阵每一行的和,因为行是矩阵的第 1 个维度,所以我们指定 MARGIN = 1 ,这样就可以在每次迭代中,将 sum( )函数应用到矩阵的每个行切片(数值向量)上:mat <- matrix(c(1, 2,
阅读全文