R语言入门秘录6/25:读取CSV文件

数据分析网整理自tbkken的《R语言入门25招》,一招招技能带你走进R语言。

问题

从逗号分割(CSV)的文件中读取数据。

解决方案

用read.csv读取CSV文件。如果CSV文件有头部,就是这样用:

代码

1> tbl <- read.csv(“filename”)

若CSV文件没有头部,就把header选项设为FALSE:

代码

1> tbl <-read.csv(“filename”, header=FALSE)

讨论

像R、Excel等各种电子表格程序、很多数据库管理器、大部分的统计软件包都可以导入和导出CSV格式的文件,所以这种格式比较流行。CSV是一种表格数据的文本文件,每一行是一条数据,一条数据中的各个项目用逗号分隔。下面是一个简单的两行三列的CSV文件(第一行是头部,其中包含了各列的名称,也是用逗号分割的):

代码

label,lbound,ubound

low,0,0.674

mid,0.674,1.64

high,1.64,2.33

read.csv函数会读取文件中的数据,并创建一个用于存储数据的数据框(data frame)。在R中,常用数据框来表示表格数据。在默认情况下,该函数认为数据文件的第一行是表头:

代码

> tbl <-read.csv(“table-data.csv”)

> tbl

label lbound ubound

1 low 0.000 0.674

2 mid 0.674 1.640

3 high 1.640 2.330

read.csv函数会用表头中的内容给数据框中的各列命名。如果文件中没有表头,可以指定header=FALSE,这样R就会按序给各列命名(在这里就是V1、V2和V3):

代码

> tbl <-read.csv(“table-data-with-no-header.csv”, header=FALSE)

> tbl

V1 V2 V3

1 low 0.000 0.674

2 mid 0.674 1.640

3 high 1.640 2.330

read.csv的一个特性是会自动地将非数值类型的数据视为因子(factor),即分类变量。这通常能满足大部分情况下的需求,毕竟R是一个统计软件,而不是Perl。tbl数据框中的label变量确实是因子,而不是字符。让我们来看看tbl的结构:

代码

> str(tbl)

‘data.frame’:

3 obs. of 3 variables:

$ label : Factor w/ 3 levels”high”,”low”,”mid”: 2 3 1

$ lbound: num 0 0.674 1.64

$ ubound: num 0.674 1.64 2.33

但在某些情况下,也有可能确实需要字符串,而不是因子。把as.is参数设为TRUE即可,此时R就不会将分数值数据视为因子:

代码

> tbl <-read.csv(“table-data.csv”, as.is=TRUE)

> str(tbl)

‘data.frame’:

3 obs. of 3 variables:

$ label : chr “low””mid” “high”

$ lbound: num 0 0.674 1.64

$ ubound: num 0.674 1.64 2.33

要注意,现在label标量是字符串,而不再是factor。另一个有用的特性是以井号(#)开始的行,即数据文件中的注释,都会被忽略。设置comment.char=””可以禁用该功能。

read.csv函数还有很多有用的小技巧。例如,跳过输入文件的前若干行、控制每一列数据的转换、过滤较短的行、限制行数以及控制字符串的形式等等。详见R帮助页面。

扩展阅读

请读者参阅read.table的R帮主页面,这是read.csv的基础。写CSV文件可以用write.csv函数。

本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。

(0)
上一篇 2015-12-30 13:38
下一篇 2016-01-01 13:42

相关文章

关注我们
关注我们
分享本页
返回顶部