1.csv文件的读取方式:
1) excel读取
2) 读取为文本文件
3) sublime(适用于大文件)
4) R语言读取(表格文件读入到R语言里时,就得到了一个数据框,对数据框的修改不会同步到表格文件。
读取的文件名字可以更改,相当于另存为,但又不会覆盖原文件。
尽量不在原文件中进行任何操作)
###文件的格式不是由后缀决定的,是由本身的内容决定的。纯文本文件的后缀没有任何意义,只是约定俗成,起提示作用,不起决定性作用。
read.csv() ##通常用于读取csv格式
read.table() ##通常用于读取txt格式
补充知识点 (1)读取工作目录下文件夹中的数据
read.csv("import/gene.csv") #按tab键,import文件夹、gene.csv就会自动显示
# 工作目录下的已经存在的import文件夹下的gene.csv /表示不同文件夹之间的区分,或者是文件夹和文件之间的划分,表示下一级。
(2)读取不在工作目录下的文件
read.csv("../import/gene.csv") # ../ 表示上一级文件夹,按tab键import就会出现,再按tab就能找到gene.csv文件
# 工作目录隔壁(上一级(桌面)的另一个下级文件夹import)的下的gene.csv
将数据框导出,成为表格文件
是R语言特有的数据存储格式,无法用其他软件打开;
保存的是变量,不是表格文件
save() 保存。 load() 加载
save(test,file = "example.Rdata")
load("example.Rdata")
## file =不能省略,省略后会报错。因为保存变量的时候可以把好几个变量保存到同一个Rdata里面.
输入文件import。 输出文件export
surv=read.table("import/xxx.txt")
save(x,file="Rdata/xxx.Rdata")
load("../1_data_pre/xxx,Rdata")
ex1 <- read.table("ex1.txt")
##读取文件后发现第一行不是列名,如果不更改,后期数据处理会出现问题。
ex1 <- read.table("ex1.txt",header = T) #修改后,列名就会正确的归位。
ex2 <- read.csv("ex2.csv")
##读取进来的文件和原文件的差别:1.行名和列名不对(行名没有正确识别,列名多了一个);2.列名中的符号变了;
更改方法: 行名没有正确识别,修改用: row.names =1
列名改变了,修改时用:check.names =F
###为什么列名会被修改,因为在R语言中默认列名不能出现特殊字符,如果有特殊字符,就会转变成.号,
check.names =F 意思是不要检查和修改列名中的特殊字符。
ex2 <- read.csv("ex2.csv",row.names = 1,check.names = F)
#注意:数据框不允许重复的行名
rod = read.csv("rod.csv",row.names = 1)
Error in read.table(file = file, header = header, sep = sep, quote = quote, : 'row.names'里不能有重复的名字
rod = read.csv("rod.csv") ###去掉row.names = 1,处理原来的数据框
soft <- read.table("soft.txt")
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : line 2 did not have 5 elements
报错原因:表格不规则,有一部分位置是空着的。
soft <- read.table("soft.txt",header = T,fill = T) #其实不对,读取完的数据有一部分列是错误的
##read.table 这个函数中有个 sep="" 参数,sep=空字符串,只要两个数据之间分割符号是看不见的就会被当成一整个分割符号(比如一个空格,两个空格,一个制表符,两个制表符都看不到),需要做以下修改。
soft2 <- read.table("soft.txt",header = T,sep = "\t")
soft2 <- read.delim("soft.txt") ## header = T,sep = "\t" 默认值可以不写,两者输出结果一样。
###一些函数的默认参数值
read.csv(file, header = TRUE, sep = ",", quote = "\"",
dec = ".", fill = TRUE, comment.char = "", ...)
read.csv2(file, header = TRUE, sep = ";", quote = "\"",
dec = ",", fill = TRUE, comment.char = "", ...)
read.delim(file, header = TRUE, sep = "\t", quote = "\"",
dec = ".", fill = TRUE, comment.char = "", ...)
read.delim2(file, header = TRUE, sep = "\t", quote = "\"",
dec = ",", fill = TRUE, comment.char = "", ...)
dim(soft)
[1] 1000 5
colnames(soft)
[1] "ID" "SEQUENCE" "GeneName" "GB_ACC" "SPOT_ID"
write.csv(soft,file = "soft.csv")
###右上角环境中刚好出现了一个soft.csv的文件,并且刚好与数据框soft中的内容一样,
save(soft,file = "soft.Rdata")
###load的结果是让Rdata中的变量出现在环境中
rm(list = ls())
###上一步刚把文件保存,soft.Rdata的文件还在环境中存在,此时load,看不出来任何变化,需要提前清空环境,或者重启session。
load(file = "soft.Rdata")
####文件的格式由生成它的函数决定,不是由文件的名字决定的。
# data.table 读取任何形式的文件 ,包括问题文件
soft = data.table::fread("soft.txt",data.table = F) #正常文件
soft = data.table::fread("abc.mp4",data.table = F) #问题文件
# rio
library(rio)
a = import("complete_set.txt") #正确文件
##不能读取问题文件,需要加上参数才能读取成功
a = import("abc.mp4",format = "\t") ##这个能读取成功
b = import_list("jimmy.xlsx")
###import_list 可以读取多个工作簿sheet的excel文件。读取后是列表,然后对列表取子集。
b$Sheet1
b[[1]]
export(b,"jimmyzhenbang.xlsx") ###导出含有多个工作簿sheet的excel文件
export(b$Sheet1,"jimmyzhenbang.csv") ###只导出工作簿sheet1
练习5-1:
6.加载y.Rdata(已保存在工作目录),求gene1列的平均值.
load("y.Rdata")
View(y)
mean(y$gene1) #####Rdata是矩阵, 也可以是数据框、列表等任何形式的文件
Error in y$gene1 : $ operator is invalid for atomic vectors
class(y)
[1] "matrix" "array"
###。class不能识别文件名称,是只能识别数据的函数。
判断数据类型的时候不带引号,不带后缀。比如class(c),class(x)
而class(“exercise.csv”), 就会反馈出来 “character”,把任何东西,无论对错,放进class里面,反馈出来都是“character”。
mean(y[,1])
[1] NA
Warning message:In mean.default(y[, 1]) : 参数不是数值也不是逻辑值:回覆NA
y[,1]
GSM1 GSM2 GSM3 GSM4 GSM5 GSM6 #####行名出现在这里没有任何影响,只是一个名字而已
"40" "20" "51" "46" "38" "49" ###有用的是下面这一行字符串
y[,1] = as.numeric(y[,1])
y[,1]
mean(y[,1])
[1] GSM1 GSM2 GSM3 GSM4 GSM5 GSM6
"40" "20" "51" "46" "38". "49"
[1] NA Warning message:In mean.default(y[, 1]) : 参数不是数值也不是逻辑值:回覆NA
###转换不成功,y是矩阵,字符型矩阵。不允许转换其中一列或者一行,要改除非整个矩阵一起改.
###只有把整个矩阵转换成数据框。但是y中有字符型向量,有数值型向量,所以本身文件有问题,平时自己处理文件的时候直接输出为数据框、列表都可以。不保存为矩阵。
mean(as.numeric(y[,1]))
[1] 40.66667
c <- y[,1]
mean(as.numeric(c))
[1] 40.66667
以上内容均来自于生信技能树的学习。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。