数据的导入
在应用R进行数据分析之前,首先要做的一步工作就是将数据导入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)
数据框的基本调整
通过read.table或read.csv导入的数据一般为数据框格式(data frame),有时需要将数据框变为矩阵或着将矩阵变为数据框。
data <- as.matrix(data)data <- as.data.frame(data)
有些分析可能需要对数据进行转置。
data <- t(data)
提取部分数据
使用[,]进行数据框中特定数据的选择,逗号前代表行,逗号后代表列,数字代表行或列的排序。
#提取第一行第二列的数据data <- data[1,2]#提取前5行或前5列data <- data[1:5,]data <- data[,1:5]#提取第1、3、5行data <- data[c(1,3,5),]#删除第一列data <- data[,-1]
apply()函数
apply()函数可以按照行或列对数据框进行计算和统计。
apply(X, MARGIN, FUN, ...)
- X为需要进行计算的数据框
- MARGIN指定计算方式
- 1代表按照行计算
- 2代表按照列计算
- c(1,2)代表同时进行行和列计算
- FUN为计算公式
- sum代表求和
- mean代表求平均数
- max代表返回最大值
- min代表返回最小值
- ……
相关的FUN函数非常多样,根据自己的需要自行搜索即可。
#求data中每一行的总和a <- apply(data,1,sum)#返回的向量a中会按照行的顺序给出每一行的总和#求data中每一列的平均值b <- apply(data,2,mean)
数据格式转换
通常意义上的“X·Y”型数据被称作“宽格式”,数据所属的分组由其在矩阵中的位置决定,例如数据a位于A行a列,则其分组信息即为“A”和“a”。
在部分R语言的函数中,其识别的数据类型并不是常规的“宽格式”而是“长格式”,在长格式的数据中,每一行代表一个条目,而其所属分组是在其它单独的列中指定。
在进行数据分析和可视化时,有时需要将“宽格式”的数据转化为“长格式”,此时就需要用到reshape2包中的melt()命令。
melt(data, id.vars, measure.vars,variable.name = "variable", na.rm = FALSE,value.name = "value", ...)
参数解释:
- id.vars是被当做维度的列变量,每个变量在结果中占一列
- measure.vars是被当成观测值的列变量,它们的列变量名称和值分别组成variable和value两列
- 列变量名称用variable.name和value.name来指定
#首先要安装并载入reshape2包install.packages("reshape2")library(reshape2)data <- data.frame(A=c(1:5),B=c("a","b","c","d","e"),C=c("Day","Day","Month","Month","Year"))data A B C1 1 a Day2 2 b Day3 3 c Month4 4 d Month5 5 e Yeardata1 <- melt(data, id.vars = "A")data1 A variable value1 1 B a2 2 B b3 3 B c4 4 B d5 5 B e6 1 C Day7 2 C Day8 3 C Month9 4 C Month10 5 C Year
相关推荐:
基于R语言的非参数与半参数回归模型
R语言回归及混合效应(多水平/层次/嵌套)模型及贝叶斯实现实践技术