导出为csv文件

csv文件是我们平时处理数据最为常用的数据格式了,因此我们重点简介一下csv数据的导出工具,csv的文件的导入前面已经讲解过了,就是read.csv和read.csv2,相应的导出为csv文件的函数就是write.csv和write.csv2.最为常用的还是write.csv,完全可以满足我们平时大部分的需求,因此我们会重点讲解write.csv函数的用法。write.csv函数的帮助文档可以使用?write.csvhelp(write.csv)来查看。

举一个最为简单的例子,比如,我们有一个矩阵需要存储,首先我们需要设置一个路径,

#setwd("D:/study/R/my git/R study/R-study/test")

我们构造一个矩阵数据,每行是一个sample,每列是一个基因。

data <- matrix(sample(1:100,16),ncol = 4,dimnames = list(c(paste("sample",c(1:4))),c(paste("gene",c(1:4)))))
data
##          gene 1 gene 2 gene 3 gene 4
## sample 1     98     21     18     54
## sample 2     35     39     60     89
## sample 3     91     28      8     96
## sample 4     33     56      9     74

可以看到data是一个data是一个有着4个样品和4个gene的数据,这时候我们想将他存储为csv文件。可以直接使用write.csv函数

write.csv(x = data,file = "data.csv")

这时候我们可以看到我们的数据就已经存储为了data.csv的形式。

figure1

figure1

打开文件看一下

figure2

figure2

第一个参数x代表的是你要输出的对象,一般来说这个必须是一个data.frame,matrix或者向量,第二个参数file是你要输出的数据的名字,你可以将其取成任意符合csv文件命名规则的名字,但是不要忘记加上后缀.csv。这两个参数其实就是write.csv最为重要的两个参数了,也可以满足我们大部分的需要了,下面我们也介绍一下write.csv函数的其他参数,需要使用的同学可以查看这些参数的定义。

1. append:这个参数是一个逻辑参数,也就是TRUE或者FALSE,设置为TRUE,导出的数据将会附着在你前面已经导出的文件后面,然并卵,这个参数其实在write.csv中是不能够使用的,只能使用默认的FALSE,设置成TRUE则会报错,我们可以用下面的例子来看一下

data2 <- matrix(sample(1:100,8),ncol = 4,dimnames = list(c(paste("sample",c(5:6))),c(paste("gene",c(1:4)))))
data2
##          gene 1 gene 2 gene 3 gene 4
## sample 5     79     69     13     28
## sample 6     27     42     80     32
write.csv(x = data2,file = "data.csv",append = T)
## Warning in write.csv(x = data2, file = "data.csv", append = T): attempt to
## set 'append' ignored

可以看到出现了warning信息,提示append=T被忽略了,而相应的,data2并没有附在data数据后面,而是直接覆盖掉了原来的数据,我们来看一下。

figure3

figure3

所以如果想用这种办法来添加文件是实现不来的,关于这个后面用write.table会讲到。

2. quote:这是一个逻辑值或者设置为数值型的向量。如果设置为TRUE,那么数据类型是字符或者因子的列将会被打上双引号,如果是数值型的向量,那么意思就是这些列会加上引号,而且这两种情况下行名和列名都会被打上引号,默认为FALSE,不会有引号。这是从帮助文档上的掉的官方解释,但是我试了一下,发现不管在什么情况下,都不会有双引号,因此,基本可以肯定这个参数也是给write.table设置的,在write.csv中没有作用,因为这个参数也没啥作用,所以大家也不要管他了。

3. sep: 这个参数是用来设置分隔符的,我们知道csv文件的全称就是逗号分隔符文件,因此这个值默认为“,”,且不能更改

4. eol: 用来设置在每行最后添加的字符,不需要管他,基本不会用到。

5. na:用来设置na的替代之,如果你的数据中有na值,那么直接输出的话还是“NA”,可以通过设置na来代替NA的输出形式。

data[1,1] <- NA#将data的第一昂第一列设置为NA
data
##          gene 1 gene 2 gene 3 gene 4
## sample 1     NA     21     18     54
## sample 2     35     39     60     89
## sample 3     91     28      8     96
## sample 4     33     56      9     74
write.csv(x = data,file = "data.csv")
figure5

figure5

可以看到第一个值变成了NA

write.csv(x = data,file = "data.csv",na="0")
figure6

figure6

可以看到NA输出为指定的输出形式 0

6. dec:用来设置文件中小数点形式,默认为“.”,且不能修改。

7. row.name和col.names:是否输出行名和列名,默认为TRUE,输出,如果不想输出,可以将其设置为FALSE

write.csv总结

前面基本上说明了write.csv的用法,大家可以使用csv来存储自己的矩阵或者data.frame文件。

write.csv2和write.csv的不同

现在唯一看到的不同,就是write.csv2默认小数点的形式为“,”,而分隔符为“;”,这主要是因为在某些西欧国家使用这种形式,比如法国,所以这个可以函数对我们没有什么用处。

导出为txt格式

另外一个更为常用格式就是txt文件了,R中对应的txt文件函数为write.table,这个函数与write.csv有很多类似的地方,其实write.csv就是write.table的一个特例,所以很多内容在上面讲过了,就不再花时间写了。

还用data作为例子。

data <- matrix(sample(1:100,16),ncol = 4,dimnames = list(c(paste("sample",c(1:4))),c(paste("gene",c(1:4)))))
data
##          gene 1 gene 2 gene 3 gene 4
## sample 1     26     34     76     27
## sample 2     55     39     82      6
## sample 3     21     95     62     37
## sample 4      5     51     12     71
write.table(x = data,file = "data.txt")

可以看到生成了一个data.txt文件,

figure7

figure7

下面我们来讲解一下write.table的参数的含义

1. sep,如write.csv,默认为" “,可以设置为其他的,如”;“等。

2. quote,如write.csv。

3. dec,如write.csv。

3. col.names and row.names,如write.csv。

还有一些其他的参数,其实大部分情况下都用不到,所以就省去不讲了,可以看帮助文档或者上网查看。

导出为R文件格式

其实用R处理数据,另外一个更为常用的数据形式就是R文件格式,R文件的存储使用save函数,读取使用load函数,例如我们的data数据,

save(data, file="data")

figure8 #### 可以看到生成了一个没用任何后缀名的文件,这就是R文件,我们这时候如果删除现在工作空间的data

rm(list="data")
ls()
## [1] "data2"
#data数据已经删除
load("data")#导入存储的data R文件
ls()
## [1] "data"  "data2"
data
##          gene 1 gene 2 gene 3 gene 4
## sample 1     26     34     76     27
## sample 2     55     39     82      6
## sample 3     21     95     62     37
## sample 4      5     51     12     71

可以看到R文件的存储以及读取都非常方便,所以非常推荐大家使用R文件来导出和导入数据。有一点需要注意,那就save(x,file=“x”),第二个参数的file必须写明,不能省略。