r语言 输出 日期 文件名_R语言统计与绘图:数据的输入与输出

1ac8f2e93ef7938ca421b0e0cdd699ee.png

R可以从各种数据软件中导入数据,如下图所示,R可从文本文件、Excel和Access、统计软件、数据库管理系统、专业数据库、网站和在线服务中导入数据。

8e3af8275b895a04b1a4d66f20aad296.png

临床研究中常用数据处理软件有Excel、SPSS、SAS和Stata等,今天介绍下R怎么从这4个软件中读取数据以及怎么导出R中的数据。


目  录

  • 1. 读取Excel数据

    • 1.1 read.table()函数

    • 1.2 read.csv()和read.csv2()函数

    • 1.3 3个函数的差别

  • 2. 读取SPSS数据

    • 2.1 read.spss()函数

    • 2.2 spss.get()函数

  • 3. 读取Stata数据

  • 4. 读取SAS数据

  • 5. 导出R中的数据


1. 读取Excel数据

R虽然可以导入SPSS、SAS和Stata软件的数据,但是最好的数据导入方法还是导入经过初步处理的原始数据,而不是导入可能经过另一种统计软件处理过的数据。

读取Excel数据的最好方式就是将Excel转化为csv,然后将csv数据导入到R中。

今天介绍怎么导入csv格式文件。

Excel数据一般为.xlsx.xls格式,可以通过文件-另存为-保存类型-选择保存为csv文件,然后将csv文件复制到R工作目录中去。

1.1 read.table()函数

可以使用read.table()函数将带分隔符的文本文件中导入R中。

read.table(file, header = FALSE,sep = "", quote = "\"'",
           dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),
           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", text, skipNul = FALSE)

## 部分参数释义

file # 要读取的数据文件名(将文件名包含在""内)。
# 如果数据文件不在R工作目录里,需要使用全路径,所以建议放在工作目录中。
header # 逻辑值;数据文件的第一行是否为变量名;
sep # 分开数据的分隔符;默认为空白""。
# 使用sep=","则读取用逗号分隔行内数据的文件;
# 使用sep="\t"则读取用制表符分割行内数据的文件。
quote # 指定用于包围字符型数据的字符,默认双引号("")或单引号('')
dec # 用来表示小数点的符号。
row.names # 指定行名的向量,或文件中一个变量的序号或名字,默认行号取为1, 2, 3...,
col.names # 如果数据文件的第一行不包括变量名(header=FASLE),
# 则可以用col.names去指定一个包含变量名的字符向量。
# 如果header=FALSE以及col.names选项被省略了,则变量分别命名为V1、V2、V3...
as.is # 逻辑词;为FALSE,则将字符型变量转为因子型变量,
# 为TRUE,则仍将其保留为字符型(TRUE)。
# 也可以是逻辑型、数字型、或字符向量用来指定哪些列不需要转化为因子。
na.strings # 表示缺失值的字符向量。
# 如na.strings=c("-9","?"),表示在读取数据时,会把-9和?值转换成NA。
colClasses # 指定各列变量数据类型的一个字符型向量。
# 如colClasses=c("numeric","numeric","character","NULL","numeric"),
# 前两列读取为数值型,第三列读取为字符型,跳过第四列,第五列读取为数值型。
# 如果数据有多余五列,colClasses的值会被循环。
# 在读取大型文本文件时,指定colClasses参数可以提升处理速度。
nrows # 可以读取的最大行数(忽略负值)。
skip # 在读取数据前跳过的行数。
check.names # 如果为TRUE,则检查变量名是否在R中有效。
fill # 某些情况下,文件中各行的长度不相等,这个参数是个逻辑词,
# 设置read.table在某些值缺失的情况下,是否自动添加空白值。
strip.white # 在sep指定情况下,为TRUE,则删除字符型变量前后多余空格。
stringsAsFactors # 逻辑词,标记处字符向量是否需要转化成因子。
# 默认值是TRUE,除非它被colClases所覆盖。
# 在处理大型文本文件时,设置成stringsAsFactors=FALSE可以提升处理速度。
text # 一个指定文字进行处理的字符串。如果text被设置了,file应该被留空。
blank.lines.skip # 逻辑词;为TRUE,忽略空白行。
comment.char # 默认情况下,comment.char把符号"#"后的任何文字当作注释;
# 可以改变comment.char = "符号"来改变注释字符;
# 如果数据中不包括任何注释,设置comment.char=""可以加快读取速度。
flush # 逻辑词;在所有字段都已读入的情况下,是否应该跳到下一行。
allowEscapes # 逻辑词;设置是否使用转义符(如"\n"表示转一行),还是直接读入。
encoding # 源文件的编码格式

1.2 read.csv()和read.csv2()函数

read.csv()read.csv2()函数是read.table()函数的两种变形,这两个函数除了默认值与read.table()不同以外,其他的用法与read.table()完全相同。

两个函数的用法:

read.csv(file, header = TRUE, sep = ",", quote = "\"",
         dec = ".", fill = TRUE, comment.char = "", ...)
         
read.csv2(file, header = TRUE, sep = ";", quote = "\"",
          dec = ",", fill = TRUE, comment.char = "", ...)        

从调用格式可看出,与read.table()不同,这两个函数默认参数都是header=TRUE

1.3 3个函数的差别

read.table()函数:读取数据的分隔符为空格,小数点用点号"."

read.csv()函数:读取数据的分隔符为逗号,小数点用点号"."

read.csv2()函数:读取数据的分隔符为分号,小数点用逗号","

2. 读取SPSS数据

foreign包中的read.spss()函数和Hmisc包中的spss.get()函数都可以导入SPSS数据,函数spss.get()是对read.spss()的一个封装,可以自动设置后者的许多参数,让整个转换过程更加简单一致。

foreign包是基础包,默认安装。

install.packages("Hmisc") # 安装Hmisc包
library(Hmisc)  # 加载Hmisc包
mydata "mydata.sav", # mydata.sav是要导入的SPSS数据文件
                   use.value.labels=TRUE) # 将带有值标签的变量转换为R中相同水平的因子
# mydata是导入后的R数据框名。

2.1 read.spss()函数

read.spss(file, use.value.labels = TRUE, to.data.frame = FALSE,
          max.value.labels = Inf, trim.factor.names = FALSE,
          trim_values = TRUE, reencode = NA, use.missings = to.data.frame, 
          sub = ".", add.undeclared.levels = c("sort", "append", "no"),
          duplicated.value.labels = c("append", "condense"),
          duplicated.value.labels.infix = "_duplicated_", ...)

## 部分参数释义
file  # 要读取的sav数据格式(将文件名包含在""内);
# 如果文件不在工作目录,可能需要写入全部文件路径。
use.value.labels 逻辑词;默认为TRUE,表示将带有值标签的变量转换为R中的因子;
# 为FALSE,则不转化为因子。
to.data.frame # 逻辑词;默认为FALSE,将数据读入到列表中;
# 为TRUE,则将数据读入到数据框中。

2.2 spss.get()函数

spss.get(file, lowernames=FALSE, datevars = NULL,
         use.value.labels = TRUE, to.data.frame = TRUE,
         max.value.labels = Inf, force.single=TRUE,
         allow=NULL, charfactor=FALSE, reencode = NA)

## 部分参数释义
file # 要读取的sav数据格式(将文件名包含在""内);
# 也可以是网络上的数据文件,以"http:/"或"https://"格式表示;
lowernames # 逻辑词;为TRUE时将变量名称转换为小写;
datevars # 一个向量;指定哪些变量需要转换为R内部日期格式;
use.value.labels # 逻辑词;默认TRUE,表示将带有值标签的变量转换为R中的因子;
# 为FALSE,则不转化为因子。
to.data.frame # 逻辑词;默认为FALSE,将数据读入到列表中;
# 为TRUE,则将数据读入到数据框中。
allow  # 字符向量,默认情况下,变量名称中的下划线"_"将转换为点"."。

3. 读取Stata数据

可以使用read_stata()函数将stata数据导入到R中,调用格式为:

read_stata(path,atomic.to.fac = FALSE,drop.labels = FALSE,
  enc = NULL,verbose = FALSE)

## 参数解释
path # 数据文件的路径
atomic.to.fac # 逻辑词,如为TRUE,则将数据集中的分类变量转换为因子
drop.labels # 逻辑词,如为TRUE,将删除没有使用的值标签
enc # 数据文件的字符编码
verbose # 逻辑词,如为TRUE,将显示导入数据的进度条

4. 读取SAS数据

从SAS文件读入数据的方法有很多,常用比较可靠的方法是在SAS中使用PROC EXPORT将SAS数据集保存为一个逗号分隔的文本文件,再使用read.table()或read.csv()函数读取。

SAS程序:   
libname datadir "C:\mydata"; 
proc export data=datadir.clients
outfile="clients.csv"
dbms=csv; 
run;

R程序: 
mydata "clients.csv",
header=TRUE,
sep=",")

也可以使用foreign包的read.ssd()函数或Hmisc包的sas.get()函数读取。

5. 导出R中的数据

R可以将R数据对象(通常是数据框或矩阵)导出到文本文件。

常用的函数为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"),
            fileEncoding = "")

### 部分参数解释
x # 要导出的R中的对象
file  # 字符值,要导出的R对象的文件名称
append # 逻辑词;为TRUE则将输出数据添加到现有文件的结尾;
# 为FALSE则覆盖这个文件。
quote # 逻辑词,默认为TRUE,表示将字符或因子值放入引号中;
# 或为数值向量,指定哪些变量应该放在引号中
sep # 字符值,设置一行中分隔值的字符
eol # 字符值,设置放置在每行结尾处的字符
na # 表示缺失值NA的字符
dec # 表示小数点的字符
row.names # 逻辑词,默认为TRUE,设置输出中是否应该包括行名称;
# 或数值向量,设置哪些行的名称应该输出
col.names # 逻辑词,默认为TRUE,设置输出中是否应该包括列名称;或字符向量,设置列名称
qmethod # 设置如何处理引用字符和因子字段中的引号。
# "escape"表示用反斜杠转义引号;double表示将引号转义为双引号(即把"转换成"")
参考资料
  1. [美]Robert I. Kabacoff著.R语言实战(第2版)[M].王小宁等译.北京:人民邮电出出版社.2016.
  2. 刘强,裴艳波,张贝贝编著.R语言与现代统计方法.北京:清华大学出版社.2016.
  3. 各函数R帮助文档

相关文章

Excel数据导入R前的注意事项 2020-05-30 R语言统计与绘图:forestplot包绘制森林图 2020-05-29 R语言统计与绘图:pROC包绘制ROC曲线 2020-05-25 【资源】分享一本带完整书签可跳转的R语言工具书 2020-05-24 R语言统计与绘图:ggsurvplot()函数绘制Kaplan-Meier生存曲线 2020-05-21

26b2c3ec1c9b4b89cba3b5b324f4b6a9.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值