R—读取数据(导入csv,txt,excel文件)

news/2024/11/8 16:51:15/

导入CSV、TXT文件

read.table函数:read.table函数以数据框的格式读入数据,所以适合读取混合模式的数据,但是要求每列的数据数据类型相同。
read.table读取数据非常方便,通常只需要文件路径、URL或连接对象就可以了,也接受非常丰富的参数设置:

  • file参数:这是必须的,可以是相对路径或者绝对路径(注意:Windows下路径要用斜杠’/‘或者双反斜杠’\')。
  • header参数:默认为FALSE即数据框的列名为V1,V2…,设置为TRUE时第一行作为列名。
data1<-read.table('item.csv')#默认header=FALSE
data2<-read.table('item.csv',header=TRUE)
  • sep参数:分隔符,默认为空格。可以设置为逗号(comma)sep=‘,’,分号(semicolon)sep=';'和制表符(tab)。
  • read.csv、read.csv2、read.delim是read.table函数的包装,分隔符分别对应逗号,分号,制表符,同样接受read.table所有参数。
  • read.csv函数header参数默认为TRUE,不同于read.table。
data3<-read.csv('item.csv',sep=',',header=TRUE)
data4<-read.table('item.csv')
#下文示例采用read.csv函数,两种写法效果相同
  • 字符型数据读入时自动转换为因子,因子是R中的变量,它只能取有限的几个不同值,将数据保存为因子可确保模型函数能够正确处理。But当变量作为简单字符串使用时可能出错。要想防止转换为因子:
    1. 令参数stringAsFactors=FALSE,防止导入的数据任何的因子转换。
    2. 更改系统选项options(stringsAsFactors=FALSE)
    3. 指定抑制转换的列:as.is=参数。通过一个索引向量指定,或者一个逻辑向量,需要转换的列取值FALSE,不需要转换的列取值TRUE。
data5<-read.csv('item.csv',stringAsFactors=FALSE)
  • 如果数据集中含有中文,直接导入很有可能不识别中文,这时加上参数fileEncoding=‘utf-8’
read.csv('data.csv',fileEncoding='utf-8')

一般这些参数足够使用,但是当导入大量数据时可能吃不消,下面一些参数可能有所帮助(其他用途当然也可以)。
读取大量数据时,在不加内存的情况下预先分配内存是很好的选择。
首先reaadLines函数可以获得数据的行数(注意L为大写)。先判断数据量。

lines<-readLines('item.csv')
  • comment.char:注释默认是#后面的内容,也可以设置为其他字符。若数据中没有注释,则令comment.char=''可以加快读取速度。
#若不包含注释(默认为#),设置comment.cahr=''可能加快读取速度,也可以指定注释字符
data3<-read.csv('item.csv',comment.char='')
  • nrows:读取最大行数,再加上header。读取大量数据时可以读取其中一部分。
data4<-read.csv('item.csv',comment.char='',nrows=10)#读取前10行数据和header
  • skip:指定从文件开头跳过的行数,再加上header。
#skip指定从文件开头(不包括header)跳过的行数
data5<-read.csv('item.csv',comment.char='',nrows=10,skip=2)#跳过前两行和header
  • colClasses:指示每一列的数据类型,先分析一部分数据得到数据类型,然后指定数据类型可以加快读取速度。另外:“NULL”指示跳过该列,不加引号的NA软件自动识别。
#colClasses指示每一列的数据类型
classes<-sapply(data9,class)
data6<-read.csv('user.csv',colClasses=classes)
#NULL跳过该列
data7<-read.csv('user.csv',colClasses=list('integer','NULL','factor'))
#不加引号的NA,软件自动识别该列
data8<-read.csv('user.csv',colClasses=NA)

scan函数:返回一个向量。当读取的数据为同一模式时,scan是最佳方式,默认读取数值型数据。
若想读取其他类型,使用what=参数指定。读取大数据文件时,若想跳过某一列数据,可以在what=参数列表中使用NULL。
scan函数通常用来读取数据矩阵,嵌入matrix函数中使用。

value<=scan('1.csv',what=c(f1=0,NULL,f3='',rep(list(NULL),6),f10=0))
#第一列、第十列为数值类型,f3=''表示第三列为字符型数据,第二列和第四列到第九列跳过。rep函数不能复制null,故用列表形式添加多个NULL
data<-matrix(scan(),ncol=5,byrow=TRUE)
#scan()返回一个向量,ncol=5表示组成的矩阵为五列,矩阵默认为按列存储也可通过设置byrow=TRUE为按列存储。

**固定宽度读取数据:**read.fwf函数,header=参数,as.is=参数,sep=参数等,同read.table。widths=参数是一个向量,向量值是要读入的字段宽度,负数表示跳过。

读取Excel文件

如果可能的话尽量将Excel文件另保存为CSV文件,方便导入。但是无论保存为CSV还是TXT文件,都只能保存当前活动的工作表。
readxl包 可以很方便的读取,且各个系统都通用。如果只是读取的话,无疑是非常方便的方法。
只需要下载readxl包,用read_excel函数读取就可以了,并且同时支持老版本的.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")# If NAs are represented by something other than blank cells,
# set the na argument
read_excel("excel.xls", na = "NA")

RODBC包只基于Windows

  • 1.安装包和引用RODBC包,安装不加引号,引入不加引号。
  • 2.连接Excel表格文件。.xls格式的Excel用odbcConnectExcel函数,.xlsx格式的Excel用odbcConnectExcel2007函数。
  • 3.读取数据:sqlFetch函数,其中默认Excel表格第一行作为列的变量名。
  • 4.断开连接。
#安装和引用RODBC包,安装不加引号,引入不加引号
install.packages("RODBC")
library(RODBC)#创建连接
connect<-odbcConnectExcel('secert.xls')#读取Excel表格,其中A为Sheet名(支持中文)
sqlFetch(connect,'A')#关闭R与Excel表格的连接
odbcClose(connect)

XLConnect包

  • 1.安装包和引用XLConnect包。
  • 2.连接Excel表格文件:loadWorkbook函数
  • 3.读取数据:readWorksheet函数(connect,‘Sheet名’),同样默认Excel表格第一行作为列的变量名。

各个系统通用,并且不只是支持读取,也可以写入。

#安装和引用XLConnect包
install.packages('XLConnect')
library(XLConnect)#连接
connect<-loadWorkbook('secert.xlsx')#读取,A为Sheet名
readWorksheet(connect,'A')

http://www.ppmy.cn/news/53067.html

相关文章

业界内源码学习第一节

技术主题 业界内的技术研究 技术原理 HashMap是Java中最常用的数据结构之一,它使用键-值对的方式存储和管理数据。下面是Java 11中HashMap的简化版本源代码: java Copy code public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>,…

《站在巨人的肩膀上学习Java》

Java从诞生距今已经有28年了&#xff0c;在这段时间里&#xff0c;随着Java版本的不断迭代&#xff0c;Java新特性的不断出现&#xff0c;使得Java被使用的越来越广泛。在工程界Java语言一直是大家最喜欢的语言之一&#xff0c;Java一直排行在编程语言热门程度的前3名。 可想而…

用户的权限

Linux基础 提示&#xff1a;个人学习总结&#xff0c;仅供参考。 一、Linux系统部署 二、服务器初始化 三、文件和用户管理 四、用户的权限 提示&#xff1a;文档陆续更新整理 用户的权限 Linux基础一、基本权限UGO1. 权限对象&#xff1a;2. 权限类型3. 设置权限&#xff0…

AD9208的4通道 14-bit、2.4GSPS采样率之中文版资料

板卡概述 FMC137 是一款基于 VITA57.4 标准规范的 JESD204B 接口FMC 子 卡 模 块 &#xff0c; 该 模 块 可 以 实 现 4 路 14-bit 、 2GSPS/2.6GSPS/3GSPSADC 采集功能。该板卡 ADC 器件采用 ADI 公司的 AD9208 芯片&#xff0c;&#xff0c;与 ADI 公司的 AD9689 可以实现…

Docker 在Linux-CentOS上的安装使用

Linux CentOS 虚拟机安装及与windows远程登录_XiaoGuaiSs的博客-CSDN博客 一、如果安装过程有兼容问题&#xff0c;执行更新 yum 包&#xff08;生产环境中此步操作需慎重&#xff09; 注意​ yum -y update&#xff1a;升级所有包同时也升级软件和系统内核&#xff1b;​ …

JQuery快速入门

JQuery是一个快速、简洁且功能丰富的JavaScript库&#xff0c;它封装了JavaScript常用的操作&#xff0c;提供了一种简单的方式来操作HTML文档、处理事件、创建动画、处理AJAX请求等。JQuery不仅可以减少编写代码的工作量&#xff0c;也可以提高代码的可读性和可维护性。 load…

Java每日一练(20230428)

目录 1. 搜索旋转排序数组 &#x1f31f;&#x1f31f; 2. 用栈实现队列 &#x1f31f; 3. x 的平方根 &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 搜索旋转排序…

VirboxLM-免服务版授权码,快速实现一机一码

一、产品介绍 ​ 授权码是由深盾科技开发的一款软件保护及授权管理产品 ​&#xff0c;一方面要保护软件代码不被逆向&#xff0c;另一方面要控制软件的授权使用。软件用户只需要输入授权码&#xff08;由数字和字母组成的一串字符&#xff09;&#xff0c;激活授权码后即可使…