首页 > 其他分享 >R语言读取和写入文件

R语言读取和写入文件

时间:2024-07-10 18:58:23浏览次数:13  
标签:读取 写入 #### base 3.2 import txt ### 语言

#### 3.2 文本文件的读写 ###
###  3.2.1 base包
import.txt <- read.table("data/iris.txt",header = TRUE) # 读入iris.txt文件
head(import.txt)
import.csv <- read.table("data/iris.csv",header = TRUE,sep = ",") #读入iris.csv文件
head(import.csv)
import.csv1 <- read.csv("data/iris.csv") # 利用read.csv将iris.csv文件读入
head(import.csv1)
# 修改行名称
w0 <- read.table("data/iris.txt",header = T,row.names = paste0("row",1:150))
head(w0)

file.exists("data/women.txt") # 查找当前文件夹是否存在women.txt文件,返回FALSE
write.table(women,"data/women.txt",row.names = F,col.names = F) # 将women数据集导到本地
file.exists("data/women.txt") # 查找当前文件夹是否存在women.txt文件,返回TRUE
women1 <- read.table("data/women.txt") # 将women.txt文件读入到R中
women1
#读入数据时并设置列名
women2 <- read.table("data/women.txt",header = F,col.names = c("height","weihgt")) 
women2

# skip参数和nrows参数的使用
read.table("data/women.txt",skip = 10,col.names = c("height","weight"))
read.table("data/women.txt",nrows = 6,col.names = c("height","weight"))
read.table("data/women.txt",skip = 10,nrows = 3,col.names = c("height","weight"))

# 读取非结构化文本文件
unstructuredText <- readLines("data/unstructuredText.txt")
unstructuredText

### readr包
library(readr)
# 读入csv文件
iris1 <- read_csv("data/iris.csv")
iris1
# 读入txt文件
read_delim("data/iris.txt",delim = " ") # 将分隔符设置为空格
read_delim("data/women.txt",delim = " ",col_names = FALSE) 
read_delim("data/women.txt",delim = " ",col_names = c("height","weight"))
read_delim("data/women.txt",delim = " ",col_names = c("height","weight"),
           col_types = list(col_character(),col_double()))
# 查看文件大小
paste(round(file.size("data/ccFraud.csv")/(1024*1024),0),"M")
# 计算利用read.csv导数据耗时
system.time(read.csv("data/ccFraud.csv"))
# 计算利用read_csv导数据耗时
system.time(read_csv("data/ccFraud.csv"))


### data.table包
library(data.table)
system.time(fread("data/ccFraud.csv"))
# 导入全部数据
ccFraud <- fread("data/ccFraud.csv") 
str(ccFraud)
# 只导入custID和fraudRisk变量
y <- fread("data/ccFraud.csv",select = c("custID","fraudRisk"))
str(y)
# 剔除fraudRisk变量
x <- fread("../data/ccFraud.csv",drop = "fraudRisk")
str(x)

# 对比导出数据集的耗时
system.time(write.csv(ccFraud,"data/ccFraud1.csv",row.names = F))
system.time(fwrite(ccFraud,"data/ccFraud2.csv",row.names = F))


#### 3.3 Excel文件读写 ###
# 利用RODBC包读入
library(RODBC)
channel <- odbcConnectExcel2007("../data/sample.xlsx") # 建立连接
odbcdf <- sqlFetch(channel,'data')     # 读取工作表data的数据
odbcClose(channel)                     # 关闭连接
odbcdf
# 利用xlsx包读取EXcel数据
library(xlsx)
res <- read.xlsx('../data/sample.xlsx',1,encoding="UTF-8")    # 利用read.xlsx函数读取Excel文件
res
detach(package:xlsx)
# 利用XLConnect包读取Excel数据
library(XLConnect)
wb <- loadWorkbook("data/sample.xlsx")    # 加工作薄加载到R中
xldf<-readWorksheet(wb,sheet=getSheets(wb)[1])  #读取第一个工作表的数据
xldf
# 利用readxl包读取Excel数据
library(readxl)
readexcel <- read_excel("data/sample.xlsx",1,col_names = T)
readexcel
# 利用openxlsx包读取Excel数据
library(openxlsx)
opxl <- read.xlsx("data/sample.xlsx")
opxl

# 3.3.1 xlsx包
# wrtie.xlsx函数
library(xlsx)
# 查看data目录下是否包含test_output.xlsx文件
file.exists("data/test_output.xlsx")
# 导出iris到本地
write.xlsx(iris,"data/test_output.xlsx",
           sheetName = "iris",row.names = F)
# 查看文件是否存在
file.exists("../data/test_output.xlsx")

# 对现有工作簿追加文件
write.xlsx(mtcars,"data/test_output.xlsx",
           sheetName = "mtcars",append = TRUE)

file <- "data/test_output.xlsx"
wb <- loadWorkbook(file) # 将文件加载到R中
sheets <- getSheets(wb)  # 读取wb中的工作表
sheets # 返回每个指向工作表的java对象引用列表
names(sheets) # 查看列表名字

removeSheet(wb,sheetName = names(sheets)[2]) # 移除mtcars工作表
getSheets(wb) # 查看wb中的工作表

createSheet(wb,sheetName = "women")  # 在wb中创建women工作表
getSheets(wb) # 查看wb中的工作表

(sheet <- getSheets(wb)[[2]]) # 取第二个sheet
rows <- getRows(sheet)  # 获得所有行
cells <- getCells(rows) # 返回所有非空的单元格
values <- lapply(cells, getCellValue) # 提取非空单元格的值
values # 查看结果

addDataFrame(women,getSheets(wb)[[2]],row.names = FALSE) # 将women数据框添加到wb中的women工作表中
cells <- getCells(getRows(getSheets(wb)[[2]]))
lapply(cells[1:2],getCellValue) # 查看前面两个非空单元格的值

# 将所作操作保存到原文件中
file
saveWorkbook(wb,file) 

# 读入Excel文件
# 方式一:通过指定sheetIndex参数实现
iris1 <- read.xlsx(file,sheetIndex = 1)
head(iris1)
# 方式二:通过指定sheetName参数实现
iris2 <- read.xlsx(file,sheetName = "iris")
head(iris2)
# 读取部分数据
read.xlsx(file,sheetIndex = 1,rowIndex = 1:6,colIndex = 1:4)

# 3.3.2 XLconnect包
# https://github.com/miraisolutions/xlconnect
file <- "data/test_output.xlsx"
# 读取或创建一个XLSX文件,此步相当于建立一个连接
library(XLConnect)
wb <- loadWorkbook(file) # create参数默认为FALSE,如果为TRUE,则创建一个XLSX文件
sheets <- getSheets(wb)  # 读取wb中的工作表
sheets # 查看现有工作表的名称
createSheet(wb,name = "mtcars") # 创建新工作表
# 将mtcars数据框写入mtcars工作表中,默认从第一个单元格A1开始写入
writeWorksheet(wb,data = mtcars,sheet = "mtcars",header = TRUE) 
# 存入硬盘,直到此步方才有文档生成
saveWorkbook(wb) # 存入硬盘,直到此步方才有文档生成
mtcars1 <- readWorksheet(wb,"mtcars") # 读取mtcars工作表的数据
head(mtcars1) # 查看前六行数据

# 直接将cars数据框写入到Excel文件中
writeWorksheetToFile(file,cars,"cars")
# 查看前7行
readWorksheet(wb,"cars",endRow = 7) 
# 重新加载文件
wb <- loadWorkbook(file) 
readWorksheet(wb,"cars",endRow = 7) 

# 一次性将文件中所有工作表的前7行数据读入
(all <- readWorksheet(wb,sheet = getSheets(wb),endRow = 7)) 
# 提取women数据
all$women

# 通过readWorksheetFromFile直接从文件中读取数据
cars <- readWorksheetFromFile(file,sheet = "cars")
head(cars)

# 3.3.3 openxlsx包
file <- "data/test_output.xlsx"
if(!require(openxlsx)) install.packages("openxlsx") #加载openxlsx包,若不存在则在线安装
wb <- loadWorkbook(file) # 加载Excel文件到R中,保存为wb对象
wb #查看wb对象

# 读取第一个工作表的前7行数据
read.xlsx(file,sheet = 1,rows = 1:7)  # 直接从Excel文件中读取
read.xlsx(wb,sheet = 1,rows = 1:7)    # 从wb对象中读取
read.xlsx(wb,sheet = 1:2) # 同时读取两个sheet数据会报错
(sheet_name <- sheets(wb))  # 读取wb对象中的工作表名称
is.vector(sheet_name)   #判断是否为向量   

# 删除某些单元格数据
deleteData(wb,sheet = 1,cols = c(2,3,4,5),rows = c(2,3,4,5),gridExpand = FALSE) 
# 通过saveWorkbook保存操作结果
saveWorkbook(wb,file,overwrite = TRUE)
# 查看最新结果
read.xlsx(wb,sheet = 1,rows = 1:7)
# 删除某一区域范围内的数据
deleteData(wb,sheet = 1,cols = c(1,2,3),rows = c(7,8),gridExpand = TRUE) 
saveWorkbook(wb,file,overwrite = TRUE) # 保存结果
read.xlsx(wb,sheet = 1,rows = 1:8) # 查看最新结果

removeWorksheet(wb,"iris") # 移除wb对象中的iris工作表
sheets(wb)  # 查看此时wb对象中的工作表名称
addWorksheet(wb,"iris") # 在wb对象中新增iris工作表
sheets(wb)
wb # 查看wb对象

#利用writeData写入数据
writeData(wb,sheet = "iris",x = iris)  
#利用writeDataTable从第1行第7列作为起始位置开始写入
writeDataTable(wb,sheet = "iris",x = iris,startCol = 7) 
saveWorkbook(wb,file,overwrite = TRUE) # 保存结果


# 3.3.4 readxl包
file <- "data/test_output.xlsx"
if(!require(readxl)) install.packages("readxl") # 加载readxl包
(name <- excel_sheets(file)) # 查看文件包含的工作表名称
mydata <- read_excel(file,sheet = "women") # 读取women工作表的数据
head(mydata)

# 导入大数据集,对比各函数的读取数据耗时
rm(list=ls());gc()
# 利用xlsx包的read.xlsx函数读取
system.time(xlsx::read.xlsx("data/ccFraud.xlsx",1))
# 利用XLConnect包的readWorksheet函数读取
rm(list=ls());gc()
system.time(XLConnect::readWorksheetFromFile("data/ccFraud.xlsx",1))
# 利用openxlsx包的read.xlsx函数读取
rm(list=ls());gc()
system.time(openxlsx::read.xlsx("data/ccFraud.xlsx",1))
# 利用readxl包的read_excel函数读取
rm(list=ls());gc()
system.time(readxl::read_excel("data/ccFraud.xlsx",1))

#### 3.4 数据库文件读写 ###
# 3.4.1 RODBC包
library(RODBC)
channel <-odbcConnect("daniel","root","123456")
channel
odbcGetInfo(channel)
sqlSave(channel,mtcars,"mydata",append= FALSE) #将mtcars表写入MySQL中
mydata1 <- sqlFetch(channel,"mydata") # 直接将MySQL中的mydata表读入到R中
head(mydata1)
mydata2 <- sqlQuery(channel,"select * from mydata") # 将sql语句运行后的结果读入到R中
head(mydata2)
result <- sqlQuery(channel,"select vs,am,avg(mpg) from mydata group by vs,am") #对数据进行聚合
result
sqlDrop(channel,"mydata") # 删除MySQL中的mydata表
odbcClose(channel) # 关闭连接
odbcGetInfo(channel)
# 3.4.2 RMySQL包
library(RMySQL)
conn <- dbConnect(MySQL(),dbname = "test",user = "root",password = "123456") # 建立连接
dbGetInfo(conn) #查看详细信息
dbListTables(conn) # 查看当前库的所有表名
dbWriteTable(conn,"mydata",mtcars) # 将mtcars数据写入到MySQL中,保存为表mydata
dbListTables(conn) # 查看当前库的所有表名
dbListFields(conn,"mydata") # 查看mydata的列名
mydata1 <- dbReadTable(conn,"mydata") # 读取MySQL的mydata表
head(mydata1)
mydata2 <- dbGetQuery (conn,"select * from mydata limit 6") # 执行sql语句,返回查询结果
mydata2
dbDisconnect(conn) # 断开连接

标签:读取,写入,####,base,3.2,import,txt,###,语言
From: https://blog.csdn.net/2301_76574743/article/details/140331965

相关文章

  • R语言入门
    #新手上路a<-1:10aAcor(iris[,1:4])Cor(iris[,1:4])#获取帮助?median#等价于help("median"),查看中位数函数的帮助文档??median#等价于help.serach("median")搜索包含median的帮助信息help("runExample")help("runExample",package="shin......
  • 消息队列的创建,删除,发送,读取(含概念)
     消息队列 1.特点 2.相关函数    ps: 消息队列实现单个进程的发送和读取#include<stdio.h>#include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>#include<stdlib.h>#include<string.h>structmsgbuf{longmtype;//消息类型......
  • 【C语言学习】2.常量的分类及使用
    C语言中的常量有以下几种:·字面常量·const修饰的常变量·#define定义的标识符常量·枚举常量1.字面常量如数字(整型、浮点型),字符串等2.const修饰的常变量对于a这一变量,可以多次赋值而使用const修饰后变量被锁定,变更为常变量仍为变量的证明:创建数组后运行,报错显示其......
  • 【C语言学习】3.字符串+转义字符+注释
    字符串由双引号引起来的一串字符称为字符串字面值(StringLiteral),或者简称字符串。注:字符串以\0为结束标志,不算作字符串内容,若未输入,编译器将隐藏添加\0。\0为字符串的结束标志的证明:法一:chararr1[]="abc";//双引号为字符串chararr2[]={'a','b','c'};//单引号......
  • 【基于R语言群体遗传学】-15-溯祖理论coalescence
    在群体遗传学中,一个非常重要的概念是关注谱系的汇聚(遗传线索的汇合),当我们回溯过去几代人口时。在之前的博客中,我们几乎只处理了随时间推移基因变化的“正向”模拟。群体遗传学_tRNA做科研的博客-CSDN博客然而,通过时间逆向建模等位基因频率变化不仅是一个有趣的视角,当你知道......
  • 【基于R语言群体遗传学】-16-中性检验Tajima‘s D及连锁不平衡 linkage disequilibriu
    Tajima'sDTest已经开发了几种中性检验,用于识别模型假设的潜在偏差。在这里,我们将说明一种有影响力的中性检验,即Tajima'sD(Tajima1989)。Tajima'sD通过比较数据集中的两个......
  • c语言实训通讯录管理系统
    有没有大佬能帮忙看看怎么修改bug,就是文件里面文本显示他没有换行跟在输出的后面去了#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<windows.h> #include<dos.h>#include<string.h>#defineLENsizeof(structaddritem)#defineFORMAT"||%-......
  • C语言学习笔记(04)——内存空间的使用
    指针指针概述:内存类型资源的地址、门牌号的代名词指针只是个概念,要用还得用指针变量:存放指针这个概念的盒子C语言编译器对指针这个特殊的概念,有2个疑问?1、分配一个盒子,盒子要多大?​ 在32bit系统中,指针就是4个字节,指针大小都固定了,就是4字节,跟你指向什么类型没有关系2、盒子......
  • C语言—-数据的输入输出
    数据的输入C程序中实现输入的函数很多,下面逐个来进行介绍用printf函数输出数据printf函数的一般格式printf(“格式控制”,输出列表);例如#include<stdio.h>intmain(){ inta=1; printf("a=%d\n",a); printf("HelloWord"); return0;}......
  • 【C语言】学习笔记:找出一个二维数组中的最大值,并打印出该最大值及其在数组中的位置
    找出一个二维数组中的最大值,并打印出该最大值及其在数组中的位置。首先,定义了必要的变量,包括用于遍历数组的索引变量i和j,以及用于存储最大值及其位置的变量hang、lie和max。定义了一个名为arry的二维数组,并初始化了其元素。使用两个嵌套的for循环来遍历数组,并......