R语言的输入
R语言可从键盘、文本文件、Microsoft Excel和Assess、流行的统计软件、特殊格式的文件,以及多种关系型数据库中导入数据
⒈使用键盘输入数据
- 创建一个空数据框(或矩阵),其中变量名和变量的模式需与理想中的最终数据集一致
- 针对这个数据对象调用文本编辑器,输入你的数据并将结果保存回此数据对象中
例如:
> mydata <-data.frame(age=numeric(0),gender=character(0), weight=numeric(0))
> mydata <- edit(mydata)
或者
> fix(mydata)
⒉从带分隔符的文本文件导入数据
read.table()
以数据框的格式读入数据,适合读取混合模式的数据,但是要求每列数据的数据类型相同
read.table(file, row.names, col.names)
file参数:是必须的,可以是相对路径或者绝对路径(注意:Windows下路径要用斜杠'/'或者双反斜杠'\\')。 row.names, col.names
字符型数据读入若自动转换为因子
令参数stringAsFactors=FALSE拒绝转换
read.table(file, header = FALSE, sep = "", skip = 0, fill =F, comment.char = "#")
header:表明首行是否包含了变量名
sep:指定分隔数据的分隔符。如sep="\t"读取以制表符分隔的文件
skip:指定从文件开头跳过的行数,优先级别高于参数comment.char
fill:所有行中变量数目不同时,用空白代替
comment.char:读入时忽略开头为#号的行, 也可以设置为其他字符
read.csv:逗号分隔
read.csv2:分号
read.delim:制表符
均为read.table函数的包装,分隔符分别对应逗号,分号,制表符,同样接受read.table所有参数。不同在于header参数默认为TRUE,sep和quote参数内容存在差异。
readLines:Read Text Lines from a Connection
控制读入的数据行数,非批处理,有点类似于数据库中的指标操作,可对文件中的数据逐行操作;
Tips: 该数据配合R中的正则表达式相关函数,对于处理不规则的数据很强大。
readLines(con = stdin(), n = -1L)
con: 连接对象
n: 读取的行数, 负数代表读取全部
⒊读取剪切板
R语言可以从剪切板中直接读取数据,这种形式在快速读取文件,或临时读取简单文件时特别灵活方便。
以Excel内容为例
将excel的数据放在剪贴板中
通过read.delim("clipboard")来读取
read.delim(file, header = TRUE, sep = "\t", quote = "\"", dec = ".", fill = TRUE, comment.char = "", ...)
⒋读取Excel数据
- 读取一个Excel文件的最好方式,就是在Excel中将其导出为一个逗号分隔文件(csv),并使用前文描述的方式将其导入,如read.table或read.csv
- 我们可以将excel的数据放在剪贴板中,通过read.delim函数读到剪贴板
- R包中的函数如RODBC包和readxl包
RODBC包(只基于Windows)
#安装和引用RODBC包,安装加引号,引入不加引号
install.packages("RODBC")
library(RODBC)
#创建连接
connect<-odbcConnectExcel('secert.xls')
#读取Excel表格,其中A为Sheet名(支持中文)
sqlFetch(connect,'A')
#关闭R与Excel表格的连接
odbcClose(connect)
readxl包,支持.xls和.xlsx格式
#下载和引用
install.packages("readxl")
library(readxl)
#读取Excel
read_excel("old_excel.xls")
read_excel("new_excel.xlsx")
#sheet参数,指定sheet名或者数字
read_excel("excel.xls",sheet=2)
read_excel("excel.xls",sheet="data")
⒌批量读取文件
查看目录
# 当前的目录
> getwd()
[1] "C:/Users/Documents“
# 查看当前目录的子目录
> list.dirs(path = ".", full.names = TRUE, recursive = TRUE)
[1] "."
[2] "./5211game" [3] "./5211game/KIT"
查看指定目录的子目录和文件
list.files(path = ".", pattern = NULL, all.files = FALSE, full.names = FALSE, recursive = FALSE, ignore.case = FALSE)
path:路径,默认当前路径(getwd())
pattern: 返回满足字符模式的目录和文件
all.files: TURE情况下把隐藏文件也输出
full.names:输出是否加上路径
recursive:是否递归列出文件
ignore.case:是否忽略大小写
R语言的输出
⒈文本形式的输出
cat既能输出到控制台,也能输出到文件cat(... , file = "", sep = " ", append = FALSE)
writeLines将字符串向量输出到文件中writeLines(text, con = stdout(), sep = "\n", useBytes = FALSE)
write.table(x, file= "", append= FALSE, quote = TRUE, sep = " ", row.names = TRUE, col.names = TRUE)
x:输出的对象名(向量、矩阵、数据框)file:存储输出结果的文件append:是否将输出附加到文件中quote: 是否对字符或因子元素使用引号row.names, col.names:是否输出行名
print(x, digits = getOption("digits"), quote = FALSE, na.print = "", zero.print = "0", justify = "none", ...)
x:输出对象名
digits:有效数字位数
quote:字符串是否使用引号包围
na.pribt:指定NA值显示的字符串
zero.print:指定如何打印0字符,对于稀疏表,使用"."可以产生更可读的结果,类似于在矩阵中打印稀疏矩阵
justify:字符串对齐方式c("none", "left", "right", "centre")
⒉R语言格式输出
save()
例如:save(x, y, file = "xy.RData")
导入Rdata用load()函数例如:load("all.RData")