文件操作

在对文件进行操作前,可以进行工作目录的设置

1
setwd('path')
  • path:目录路径

键盘输入

方法一

使用fix()、edit()函数修改数据框(表格)

方法二

使用scan()函数,读入数据

方法三

使用cat()函数输入数据,或导出文本数据

1
cat(x,file='')

参数解释

  • x:为需要输入的数据
  • file:值为指定输入文件的绝对路径

读取文件

txt

csv

txt

1
read.table(x,header,sep,nrow,skip,fill)

参数

  • x:数据源
    • file:从文本文件中读取数据
    • “clipboard”:从剪切板中读取数据
  • header = TRUE,是否有标题行。
  • sep =‘ ’,使用哪个字符作为字段之间的分隔符。
  • nrow 可以指定读取数据的行数。
  • skip 决定跳过文件开始的多少行。
  • fill = TRUE会使用NA 值来代替那些缺失的值。
  • 更多高级选项包括:覆盖默认的行名、列名和类,指定输入文件的字符编码,以及输入的字符串格式的列如何声明。
    • row.names, 是可以传入一个字符串的向量,用来定义每一行的名称,但是这个参数我们用的不多。
    • 我们用的更多地是col.names, 就是用来定义你数据的列名。
    • 还有一个比较重要的参数叫na.strings ,这个参数可以定义NA的数值,可以键入一个向量,比如na.strings =c(‘’,000,999’_’)等。
    • 还有一个重要参数叫做stringsAsFactors , 它就是说要不要把字符串转换为因子,如果不需要将其转为因子,那么就默认其为stringsAsFactors = False,如果需要将其转换为字符串,那么就需要将其设置为stringsAsFactors = True。

csv

1
read.csv(file, header, sep, dec)

参数

  • file:包含要导入到 R 中的数据的文件的路径。
  • header:逻辑值。如果为 TRUE,则 read.csv() 假定您的文件具有标题行,因此第 1 行是每列的名称。如果不是这种情况,您可以添加参数 header = FALSE。
  • sep:字段分隔符
  • dec:文件中用于小数点的字符。

关于更多的参数可以使用help进行查询

1
help("read.csv")

数据导入

非结构化文本文件

步骤

  1. 读入文件中的所有文本行(readLines方法)
  2. 对内容进行分析或操作
readLines
1
2
readLines(con = stdin(), n = -1L, ok = TRUE, warn = TRUE,
encoding = "unknown", skipNul = FALSE)

参数

  • con:连接对象或字符串
  • n: 整数,一次读取的行数;设为复数表示读取整个数据;不设置时,默认读取整个文件
  • ok: 逻辑值,设置ok=F, 在n>0之前,读到连接末尾,返回error
  • warn:逻辑值,当文件不存在或者存在嵌入式错误时,提示
  • encoding:设置编码格式
  • skipNul:逻辑值,是否跳过错误
writeLines
1
writeLines(text, con = stdout(), sep = "\n", useBytes = FALSE)

参数

  • text
    A character vector
  • con
    A connection object or a character string.
  • sep
    character string. A string to be written to the connection after each line of text.
  • useBytes
    logical. See ‘Details’.

结构文本文件

读取本地excel文件

read_excel()
1
2
3
#导入readxl包
install.packages("readxl")
library(readxl)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
read_excel(
path,
sheet = NULL,
range = NULL,
col_names = TRUE,
col_types = NULL,
na = "",
trim_ws = TRUE,
skip = 0,
n_max = Inf,
guess_max = min(1000, n_max),
progress = readxl_progress(),
.name_repair = "unique"
)
read_xls(...) #类似
read_xlsx(...)

常用参数

  • path,数据的完整路径
  • sheet : 读取那个文件簿中的数据
  • startRow:从这一行开始查找数据
  • colNames:如果为真,第一行的数据就是列的名字
  • rowNames:如果为真,第一类数据会被作为行的名字
  • 注意:read_excel函数既可以读.xls也可以读.xlsx类型文件
readWorksheetFromFile()

从excel文件中读取sheet

1
readWorksheetFromFile(file, ...)

常用参数

  • file:指定文件
  • sheet:整数或名字,指定sheet
  • head:逻辑值,默认TRUE
  • startRow:起始行
  • endRow:结束行
  • startCol:起始列
  • endCol:结束列
read.xlsx()
1
2
3
#导入xlsx包
install.packages("xlsx")
library(xlsx)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
read.xlsx(
file,
sheetIndex,
sheetName = NULL,
rowIndex = NULL,
startRow = NULL,
endRow = NULL,
colIndex = NULL,
as.data.frame = TRUE,
header = TRUE,
colClasses = NA,
keepFormulas = FALSE,
encoding = "unknown",
password = NULL,
...
)
odbcConnectExcel()

建立RODBC连接对象至Excel文件,并将连接赋予一个对象(excel文件),在进行sql操作

1
2
3
#导入RODBC包
install.packages("RODBC")
library(RODBC)
1
2
3
4
channel<-odbcConnectionExcel(path,...)#建立RODBC连接对象至Excel文件,并将连接赋予一个对象
sqlTables(channel)#列出电子表格, show all Sheet
sqlFetch(channel,"Sheet1")#读取工作簿中的工作表至一个数据框,Sheet1为要读取的工作表名
odbcClose(channel) #关闭RODBC连接

常用属性

  • path:文件路径

使用报错

1
odbcConnectExcel is only usable with 32-bit Windows

解决方法

  • 使用odbcConnectionExcel2007()替代

读取网络中的表格

1
2
#导入XML包
library(XML)
readHTMLtable()函数
1
2
3
4
5
6
7
8
9
10
11
readHTMLTable(
doc,
header = NA,
colClasses = NULL,
skip.rows = integer(),
trim = TRUE,
elFun = xmlValue,
as.data.frame = TRUE,
which = integer(),
...
)

常用参数

  • doc:HTML文件名或者URL
  • header
  • stringsAsFactors:设置为F,数据框将不会默认把字符型转化为因子
解决乱码问题
方法一

将数据导出到本地txt文件,再重新导入

1
2
3
table_sub <- tables[[1]]
write.table(table_sub,"table_sub.txt",row.names=F)
table_sub_new <- read.table("table_sub.txt",encoding = 'UTF-8',header = T)
方法二

使用rvest包的encoding功能,自动匹配合适的字符类型

1
2
names(tables[[1]]) <- rvest::repair_encoding(names(tables[[1]]))
View(tables[[1]])

数据导出

txt&csv文件导出

1
2
write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ",eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = TRUE, qmethod = c("escape", "double"),fileEncoding = "")
write.csv(x,...) #类似

参数

  • x: 要写入的对象,最好是矩阵或数据框。如果不是,它是试图强迫x到一个数据框。
  • file: 一个字符串命名文件或编写而打开的一个连接。 “ “表示输出到控制台。
  • append: 逻辑。只有当file是一个字符串才相关。
    如果TRUE,输出追加到文件
    如果FALSE,任何现有文件的名称被摧毁
  • quote: 一个逻辑值(TRUE或FALSE)或数字向量。如果TRUE,任何字符或因素列将用双引号包围。如果一个数值向量,其元素为引用的列的索引。在这两种情况下,行和列名报价,如果他们被写入。如果FALSE,并没有被引用。
  • sep: 字段分隔符字符串。每一行x中的值都被这个字符串分隔开。
  • row.names: 表示x的行名是否与x一起写的逻辑值,或者是写行名的字符向量
  • col.names: 类似上面。
  • 其它参数请参考help()

访问数据库

前面也有使用过RODBC包进行了数据库操作,这里不再重复导入。

1
2
3
library(RODBC)
#查看内存使用及清理R工作空间中的内存变量
gc();rm(list=ls())

连接数据库

注:请先添加或者确认odbc账户

连接数据库

1
mycon<-odbcConnect(dsn, uid = "", pwd = "", ...)

属性

  • dsn:数据源名称(mydsn)
  • uid:用户名
  • pwd:密码

查看连接情况

1
odbcGetInfo(mycon)

创建表

1
2
3
4
sqlSave(channel, dat, tablename = NULL, append = FALSE,
rownames = TRUE, colnames = FALSE, verbose = FALSE,
safer = TRUE, addPK = FALSE, typeInfo, varTypes,
fast = TRUE, test = FALSE, nastring = NULL)

常用参数

  • channel:odbc连接
  • dat:数据框数据
  • tablename:表名
  • append:逻辑值,是否在已存在的表后追加内容
  • rownames:逻辑值/列名,设置是否显示行名