每天学习一点R:8.数据的导入和输出
数据的导入
在应用R进行数据分析之前,首先要做的一步工作就是将数据导入R工作环境。
R所识别的数据通常为“X·Y”型的多变量数据,格式为txt或csv格式,不同数据间以制表符(Tab)或“,”间隔。
输入数据可以使用excel进行录入和基本格式的修改,之后另存为,选择制表符分隔的文本(.txt)或CSV UTF-8(逗号分隔)(.csv)。
R中最常使用read.table()和read.csv()命令对数据进行导入。
read.table
read.table(file, header = FALSE, sep = "",
quote = ""'",dec = ".", row.names, col.names,
as.is = !stringsAsFactors, na.strings = "NA",
colClasses = NA, nrows = -1,skip = 0,
check.names = TRUE, fill = !blank.lines.skip,
strip.white = FALSE, blank.lines.skip = TRUE,
comment.char = "#",allowEscapes = FALSE, flush = FALSE,
stringsAsFactors = default.stringsAsFactors(),
fileEncoding = "", encoding = "unknown")
参数解读:
file,导入文件的名称,要用绝对路径;
header,逻辑参数,指定是否文件第一行定义为列名;
sep:
指定数据分割字符,制表符为”\t”,逗号为”,”;
na.strings:指定缺失文字
skip:指定读数据跳过的行数
nrows:指定数据读入最大的行数
dec:
指定小数点记号
row.names与col.names,赋予数据行名和列名
colClasses,数据中每列的类型
comment.char 注释字符,即忽略携带此字符的行
stringsAsFactors字符变量是否变为因子
如导入的文件与运行的R脚本位于同一文件夹中,则无需输入绝对路径,只需输入文件名即可。
通常数据的第一行为列名,第一列为行名,此时可以将参数设置为“header = TRUE, row.names = 1”。
data <- read.table(file = "tem.txt", header = TRUE, row.names = 1, sep = "\t"
其余参数一般默认即可。
read.csv
read.table()命令可以解决绝大多数数据导入的问题,但是在个别情况下,会导致数据导入失败或格式错乱,本人之前曾经遇到过,发生次数极少,原因未知,此时可以试试read.csv()命令。
read.csv()命令的使用方法和参与基本上与read.table()一致。
data <- read.csv(file = "tem.txt", header = TRUE, row.names = 1, sep = "\t", as.is = TRUE)
read.csv()命令导入数据时会自动的将非数值类型的数据是为因子(factor),但有时我们可能就是需要字符形式的数据,此时只需把as.is参数设置为TRUE即可。
报错解决
在做数据分析时,经常会碰到一些元素是以0开头的数字,在使用函数read.table或者read.csv等读取文件时,会自动的将开头的0去掉。
可以通过设定read.table或者read.csv的参数colClasses=”character”来解决这一问题。
在导入数据时,会出现这样的错误:scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,:15行没有5元素。
这是由于在提示的位置,数据的格式不规则导致无法识别,可以手动进行修改或者设定read.table的参数fill=TRUE来解决。
数据的导出
在进行一系列数据整理或统计学分析之后,可能需要导出结果数据,此时需要用到write.table()命令。
write.table(x, file = "", append = FALSE,
quote = TRUE, sep = " ", eol = "\n", na = "NA",
dec = ".", row.names = TRUE, col.names = TRUE,
qmethod = c("escape", "double"))
参数解读:
x为需要写入的文件,一般为一个数据框;
file为输入文件的路径和名字;
append如为FALSE,则任何同名的文件均会被替换;
quote规定输出的文件中的数字或字符是否被双引号括在内;
sep规定每一行中不同的值之间的间隔符;
eol规定在每一行最后的字符,“\n”代表换行;
na规定代表缺失数据的字符;
dec规定小数点的表示符号;
row.names和col.names规定输出的文件中是否包含行名或列名;
qmethod规定如何处置双引号字符,默认为escape,此时忽略双引号,当设置为double时,则把双引号当做字符输出。
#将data导出为result.txt文件
write.table(data, file = "result.txt", sep = "\t", quote = FALSE)
扩展阅读