文章目录

  • 一、数据读入
    • 1.直接输入数据
    • 2.读R包中的数据
    • 3.从外部文件读入数据
      • 3.1 读入文本文件(TXT)
      • 3.2读入Excel格式文件
      • 3.3读入其它格式文件(SAS数据、SPSS数据、Stata数据等)
  • 二、写入数据
  • 三、数据预处理
    • 1.创建新变量
    • 2.变量重编码
    • 3.变量重命名
    • 4.变量类型的转换
    • 5.日期变量的转换
  • 四、缺失数据处理
    • 1.缺失数据的探索与检验
    • 2.缺失数据的处理
  • 五、数据集的合并与拆分
    • 1.数据框的拆分与合并
    • 2.数据集的合并
    • 3.数据集的抽取

提示:以下是本篇文章正文内容,下面案例可供参考,以下纯属学习笔记。其中借助到了许多资料。书籍。

一、数据读入

数据读入方式:直接输入、外部数据读入

1.直接输入数据

c()函数方式输入

x=c(1,2,3,4) #数据之间要用逗号隔开
x
y=c("a","b","c")
y


scan()函数输入数据
先安装scan包

install.packages("scan")

2.读R包中的数据

2.1查看当前环境下的数据:ls()函数

ls()

2.2删除数据: rm()函数
2.3查看所有预先提供的数据:data()
2.4查看某个包所有预先提供的数据:data(package=‘’)
2.5读入数据:data(datasetname)

2.6查看SemiPar包中的数据
install.packages(SemiPar)
data(package=“SemiPar”)

读入SemiPar包中的copper数据

data(copper,package='SemiPar')
copper

如果一个软件包已经被library附加在库中,
则这个数据库将自动被包含在其中,例如:

library(SemiPar)
data()
data(fossil)#读取SemiPar数据库中的fossil(化石)数据
fossil

3.从外部文件读入数据

3.1 读入文本文件(TXT)

格式一:

read.table(file, header = logical_value, sep = " ", row.names ='name' )

file 是一个带分隔符的ASCII文本文件
header 为逻辑值,表明首行是否包含了变量名,
默认值为FALSE(即是数据框的列名为V1,V2,…),设置为TURE时第一行作为列名。
sep 用于指定分隔符,默认为空格,也可以设置为逗号或分号:sep=‘,‘或 sep=’;’。
row.names 指定行的名称
格式二:
选择需要读入的数据复制,然后执行下面的命令:

s2 = read.table("clipboard",header=T)
s2

3.2读入Excel格式文件

R可以直接读入Excel中的数据(xls、xlsx格式的数据),但这种格式较为复杂,应尽量避免。
如果要直接读入xls、xlsx等格式的数据,需要安装readxl包。

通常的做法是先将xls、xlsx等格式的文件转换为csv格式文件
转换方式:在excel中另存为csv格式即可。
读入csv格式的文件数据:

read.csv(file, header = TRUE, sep = ",")
S2=read.csv(file="student.csv")
S2

3.3读入其它格式文件(SAS数据、SPSS数据、Stata数据等)

R读入其它格式的数据,需要安装“foreign”包

install.packages("foreign")
library(foreign)

读入SAS数据格式:

read.xport("dataname.xpt") #读入SAS格式文件

读入SPSS数据格式:

read.spss("dataname.sav")

读入Stata数据格式:

read.dta("dataname.dta")

当读入数据文件后,使用 数据集名$变量名 ,就可以使用各个变量

二、写入数据

如果需要存储R工作空间中的数据时,可以利用write()函数,格式:

write(x, file = "data",ncolumns = if(is.character(x)) 1 else 5,append = FALSE, sep = " ")

x 是数据,通常为矩阵、向量
file 是文件名,默认为data
append=TRUE,表示在原文件上添加数据,否则写一个新文件(默认)
ncolumns 是写入数据的列数
对于列表数据或数据库数据,
也可以使用write.table()函数,写入纯文本格式数据;
或write.csv()函数,写入csv格式的excel数据文件;

write.table(x, file = "", append = FALSE, sep = " ")
write.csv(...)
write.csv2(...)

例1:将前面的S2数据写到当前工作目录下,命名为S2.txt的文件里。
write.table(S2,“S2.txt”)
例2:将前面的S2数据写到D:\R\data\目录下,命名为S2.csv的文件里
write.csv(S2, “D:\R\data\S2.csv”)

三、数据预处理

收集到的数据,由于各种原因(如市场调查中的无回答,输入错误等),
导致源数据的各种问题,如数据缺失、异常点的出现等。
在对数据进行分析之前,需要对这些源数据进行预处理。
例:R中的VIM包中,关于哺乳动物的睡眠数据(sleep)

install.packages(VIM)
library(VIM)
data(sleep,package="VIM")
sleep

在sleep数据中存在以下一些实际问题:
(1)存在许多缺失值(NA),该如何弥补这些缺失值带来的分析困难?
(2)如何构造一个新变量(如:直接列出做梦时长占全部睡眠时间的比例),或如何改变某个变量的值?
(3)如何更改变量名称(如:NonD这个变量名难以理解,想更改为一个更直观的变量名称)?
(4)在sleep中的Pred、Exp、Danger录入时均为数值型变量,如何变为因子型变量?
(5)如何合并、提取数据?

1.创建新变量

有时,需要对现有的一个或几个变量进行变换,创建一个新的变量。

方法一:左边为变量名,右边为其它变量的表达式:

方法二:用transform()函数进行变换

方法三:用with()函数进行变换

例如:有五个省份的GNP、消费(cons)和人口(pop)的数据如下:

cons<-c(5000,5800,6000,10200,8500)
cons
pop<-c(2000,3600,3500,5020,6100)
pop
gnp<-c(6000,7200,7400,11000,9200)
gnp

现在需要得到人均GNP和人均储蓄的指标数据

方法一:左边为变量名,右边为其它变量的表达式

pgnp<-gnp/pop
pgnp
psave<-(gnp-cons)/pop
psave

方法二:用transform()函数进行变换

data<-data.frame(gnp,cons,pop)#定义一个数据框
data
transform(data,pgnp=gnp/pop,psave=(gnp-cons)/pop)

方法三:用with()函数进行变换
格式: with(data,expr,),表示对data执行expr运算。

(pgnp<-with(data,gnp/pop))
(psave<-with(data,(gnp-cons)/pop))

2.变量重编码

变量重编码是数据预处理中常见的问题,比如:

将连续型变量进行分组,变成一个离散型变量
将某个值替换成另外一个值

例如:以MASS包中的Cars93数据为例,
该数据是关于不同汽车制造商不同款式的汽车价格等数据,共27个变量
现在我们关心的是:“制造商和价格”两个变量

install.packages(MASS)
library(MASS)
data(Cars93)
head(Cars93)
dat<-data.frame(manu=Cars93$Manufacturer,price=Cars93$Price)
head(dat)

由于价格的数据是连续型数值变量,
现在想将价格按照(0,12)、(12,20)、(20,max(price))
分成"cheap"、“okay”、“expensive"三种类型
方法一:利用[]将price分成不同的取值区间,然后用"cheap”、“okay”、"expensive"分别进行替换。

dat$pricegrade<-NA #dat中增加一列,赋值为NA
dat
dat$pricegrade[dat$price>=20]<-"expensive"
dat$pricegrade[dat$price>=12&dat$price<20]<-"okay"
dat$pricegrade[dat$price<12]<-"cheap"
head(dat)


方法二:使用within(data,expr)函数,表示对data执行expr运算
该函数与with()函数用法类似,不同的是该函数可以对数据框进行修改

dat<-within(dat,{pricegrade<-NApricegrade[price>=20]<-"expensive"pricegrade[price>=12&dat$price<20]<-"okay"pricegrade[price<12]<-"cheap"
})
head(dat)

方法三:利用cut()函数先将连续取值的price分成三个区间,
然后再用levels()函数将不同的区间用"cheap"、“okay”、"expensive"分别进行命名。

dat$pricegrade<-cut(dat$price,c(0,12,20,max(dat$price)))
#对价格price分成三个区间  levels(dat$pricegrade)<-c("cheap","okay","expensive")
head(dat)

如果我们需要进一步对上面的"cheap"、“okay”、"expensive"三种类型分别替换为“A”、“B”、“C”
可以利用car包中的recode()函数

install.packages(car)
library(car)
recode(dat$pricegrade,"'cheap'='A';'okay'='B';'expensive'='C'")

3.变量重命名

方法一:使用交互式编辑器
在命令窗口输入fix(data),R会自动调用一个交互式的编辑器,单击变量名,
在弹出的对话框中就可以将其重命名。

library(MASS)
data(Cars93)
head(Cars93)
dat<-data.frame(manu=Cars93$Manufacturer,price=Cars93$Price)
head(dat)
dat$pricegrade<-cut(dat$price,c(0,12,20,max(dat$price)))
levels(dat$pricegrade)<-c("cheap","okay","expensive")
head(dat)fix(dat)

方法二:利用reshape包中的rename()函数,格式:

rename(dataframe, c(oldname1='newname1',oldname2='newname2',...))

例:将数据框dat中的pricegrade重命名为grade.

install.packages(reshape)
library(reshape)
dat1 <- rename(dat, c(pricegrade="grade"))
head(dat1)

方法三:直接通过names()函数重命名。

names(dat)
names(dat)[3] <- "grade"
head(dat)

4.变量类型的转换

4.1 is.datatype(): 判断数据的类型,返回TRUE或者FALSE
4.2 as.datatype(): 将其参数转换为对应的数据类型

4.3 is.numeric(),判断括号里面的参数是否为数值型数据
4.4 is.character(),判断括号里面的参数是否为字符型数据
4.5 is.logical(),判断括号里面的参数是否为逻辑型数据
4.6 is.complex(),判断括号里面的参数是否为复数型数据
4.7 is.na(),判断括号里面的参数是否为缺失值

4.8 as.numeric(),将括号里面的参数转换为数值型数据

以上数据类型前面改为as,表示将括号里面的数据转换为相应类型数据

判断/转换数据结构也是类似的,如:
4.9 is.vector(), 判断是否为向量结构;as.vector(),转换为向量结构
4.10 is.matrix(),判断是否为矩阵结构;as.matrix(),转换为矩阵结构
4.11 is.array(),判断是否为数组结构;as.array(),转换为数组结构
4.12 is.factor(),判断是否为因子结构;as.factor(),转换为因子结构
4.13 is.list(),判断是否为列表结构;as.list(),转换为列表结构
4.14 is.list(),判断是否为列表结构;as.list(),转换为列表结构
4.15 is.data.frame(),判断是否为数据框结构;as.data.frame(),转换为数据框结构

a <- c(1,2,3);a
is.numeric(a) #判断a是否为数值型数据
is.vector(a) #判断a是否为向量结构
a <- as.character(a);a #将a转换为字符型数据
is.numeric(a)
is.vector(a)
is.character(a)

5.日期变量的转换

转换日期变量格式的是 as.Date()函数
语法结构为:

as.Date(x, "input_format")

在字符表示法和代表日历日期的 "Date "类对象之间转换的函数。
x是字符型数据格式的日期
input_format 是用于读入日期的适当格式
常见日期格式:
%d:数字表示的日期(0131),比如:0131
%a:缩写的星期名,如:Mon
%A:非缩写的星期名,如:Monday
%m:月份(0112),如:0112
%b:缩写的月份,如:Jan
%B:非缩写的月份,如:January
%y:两位数的年份,如:22
%Y:四位数的年份,如:2022

日期的默认格式为: yyyy-mm-dd

madates <- as.Date(c("2022-04-22","2022-04-25"))
madates

将默认格式的字符型数据转换为对应日期:

(strDates <- c("04/22/2022", "04/25/2022"))
dates <- as.Date(strDates,"%m/%d/%Y")
dates

四、缺失数据处理

R中,缺失值用符号NA表示。

1.缺失数据的探索与检验

R中,可以利用is.na()函数检验是否存在缺失值

y <- c(1,2,3,NA)
is.na(y)

识别矩阵或数据框中没有缺失值的行,用complete.cases()函数。
如果每行都有完整的数据,返回TRUE;
如果每行有一个或多个缺失值,则返回FALSE.

library(VIM)
data(sleep, package= "VIM") #读取VIM包中的sleep数据
sleepsleep[!complete.cases(sleep),] #提取sleep数据中不完整的行

由于逻辑值TRUE和FALSE分别等价于数值1和0,
所有可以利用sum()和mean()函数来获取关于缺失数据有用的信息。

计算sleep数据中完整行数占总行数(观测单元数)的比例。

mean(complete.cases(sleep))

2.缺失数据的处理

缺失数据的处理方法,通常有三种:

第一种:行删除法,利用函数na.omit()即可删除。

newsleep <- na.omit(sleep)
newsleep

第二种:均值替换法
当缺失值是数值型:利用该变量在其他所有对象的取值的平均值来填充缺失值
当缺失值是非数值型:利用该变量在其他所有对象的取值次数最多的值(众数)填充缺失值

第三种:多重插补(MI)法,是最常用的方法
思路:从一个包含缺失值的数据集中生成一组完整的数据集,
而在每个模拟的数据集中,缺失值用蒙特卡洛法填补。

这种多重估算技术并不是用单一的值来替换缺失值,而是产生缺失值的一个随机样本。
这种方法反映了由于数据缺失而导致的不确定。

R中的mice包可以执行缺失值的多重插补,代码如下:

library(mice)
imp <- mice(data,m)

mice(),表示对缺失数据进行m次估算
参数data,是一个包含不完整数据的数据框或矩阵,缺少的值被编码为NA。
m是多重插值的数量,默认值为m=5.
imp是一个包含m个插补数据集的列表对象,同时还含有完成插补过程的信息

fit <- with(imp,analysis)

with(),对已经完成的数据imp进行分析
analysis是一个表达式对象,用于设定应用于m个插补数据集的统计分析方法,
例如线性回归模型的lm()函数等。

pooled <- pool(fit)

pool(),合并参数估计值
fit 是一个包含m个单独统计分析结果的列表对象。
pooled 是一个包含这m个统计分析平均结果的列表对象。

summary(pooled)

生成摘要。

例如,利用MI方法插补sleep数据中的缺失值。

library(mice)
data(sleep, package="VIM")
sleep
imp <- mice(sleep)
fit <- with(imp,lm(Dream ~ Span + Gest))
pooled <- pool(fit)
summary(pooled)

五、数据集的合并与拆分

1.数据框的拆分与合并

有时需要对数据进行分组,再分析;
拆分数据框,用函数unstack()

有时需要对不同组的数据进行合并,再分析;
合并数据框,用函数stack()

例,以dataset的内置数据PlantGrowth(植物生长)为例进行分析:

data(PlantGrowth)
PlantGrowth

数据中包含30个样本观测值,
分为三组(ctrl,对照组;trt1,处理组1;trt2,处理组2),每组10个样本。
现在需要对PlantGrowth数据按照ctrl、trt1、trt2进行拆分:

data(PlantGrowth)
formula(PlantGrowth)#检查默认公式
unPG <- unstack(PlantGrowth)#根据默认公式进行拆分
unPG
sPG=stack(unPG)#对unPG进行重新组合
sPG

2.数据集的合并

横向合并两个数据框(数据集),使用merge()函数
横向合并两个数据框时,通常需要一个或多个共有变量进行连接(inner join).
例如:

newdata <- merge(dataframA,data.frameB,by="ID")

将数据框dataframA和data.frameB按照共有变量ID合并。

如果要直接横向合并两个矩阵或数据框,使用cbind()函数
但是必须要求两个矩阵或数据框有相同的行数,且以相同的顺序排列。

A <- matrix(1:12,3,4);A
B <- matrix(13:24,3,4);B
C <- cbind(A,B);C

3.数据集的抽取

3.1 保留变量。从一个大数据集中选择有限数量的变量创建一个新的数据集。
从dataframe中选取第n到第m个变量,及所有行的数据,保存到新的数据框newdata中。

newdata <- dataframe[,c(n:m)]

#例如,选取sleep中第3到第7列的数据,保存到新的数据框:

sleep
newdata1 <- sleep[,3:7]; newdata1

也可以直接指定选取的变量名称

vars <- c("var1","var2","var3","var4")
newdata <- data.frame[vars]

#例如

sleep
vars <- c("NonD","Dream","Sleep","Danger")
newdata2 <- sleep[vars]; newdata2

3.2 剔除变量

vars <- names(dataframe) %in% c(“var1”,“var2”)
newdata <- dataframe[!vars]

sleep
vars <- names(sleep) %in% c("BodyWgt","BrainWgt","NonD");vars

判断数据框sleep中的每个变量是否在向量c(“BodyWgt”,“BrainWgt”,“NonD”)中

newdata3 <- sleep[!vars];newdata3

选取数据框sleep中不属于vars的变量名,保存为新的数据框newdata4

当知道要剔除的变量是第几个变量时,可以利用以下命令:
newdata <- dataframe[c(-n,-m)] #表示删除第n和第m个变量
3.3 选择观测值
#选择sleep中前20个观测

newdata5 <- sleep[1:20, ];newdata5

#选择睡眠时间在3~6小时之间的观测值

attach(sleep)
newdata6 <- sleep[which(Sleep>=3 & Sleep <6),]; newdata6
detach(sleep)

3.4 subset()函数
表示返回符合条件的向量、矩阵或数据框的子集。

newdata7 <- subset(sleep, Sleep>=3 & Sleep<6, select=c(BodyWgt,Dream,Sleep,Span,Pred,Exp,Danger))
newdata7

参考教材:《R数据分析方法与案例详解》

R语言——(四)、数据读入与预处理相关推荐

  1. R语言的数据读入--非结构化数据读入

    目录 1.读入简单文本数据 2.用readtable读入文本 3.用readLines读入文本 4.readLines的其他用法 1.读入简单文本数据 novel = read.csv("n ...

  2. R语言的数据读入--结构化数据读入

    目录 文本文件 CSV文件 1.read.table()函数 2.read.csv()函数 xls(xlsx)读取 文本文件 对于文本文件,用命令read.table()就可以将数据对象顺利导入,具体 ...

  3. R语言四格表的统计分析及假设检验

    R语言四格表与列联表的统计分析及假设检验 卡方检验是一种确定两个分类变量之间是否存在显着相关性的统计方法. 这两个变量应该来自相同的人口,他们应该是类似 是/否,男/女,红/绿等. 例如,我们可以建立 ...

  4. R语言四格表、列联表秩和检验

    R语言四格表.列联表秩和检验 秩和检验方法最早是由维尔克松(Wilcoxon)提出,叫维尔克松两样本检验法.后来曼-惠特尼将其应用到两样本容量不等(n1不等于n2)的情况,因而又称为曼-惠特尼U检验. ...

  5. R语言入门——数据快速读取与查看(含实例代码和参数讲解)

    R语言数据读取 介绍 引言 结构安排 数据读取函数 文本数据 readLines函数 键盘键入数据 scan函数讲解 表格数据 .xlsx文件介绍 表格数据函数参数介绍 快速读入参数介绍 竞赛数据练习 ...

  6. R语言与数据分析练习:创建和使用R语言数据集数据的导入导出

    R语言与数据分析练习:创建和使用R语言数据集&数据的导入导出 实验一 创建和使用R语言数据集 一.实验目的: 了解R语言中的数据结构. 熟练掌握他们的创建方法,和函数中一些参数的使用. 对创建 ...

  7. 大数据分析R语言tidyverse数据清洗工具教程

    凌乱的数据集无处不在.如果要分析数据,不可避免地需要清理数据.在大数据分析R语言tidyverse数据清洗工具教程中,我们将研究如何使用R和一些漂亮的tidyverse工具来做到这一点. 该tidyv ...

  8. R语言小白学习笔记3—R语言读取数据

    R语言小白学习笔记3-R语言读取数据 笔记链接 想说的话 学习笔记3-R语言读取数据 3.1 读取CSV文件 3.1.1 read_delim函数 3.1.2 fread函数 3.2 读取Excel数 ...

  9. R语言生物群落数据统计分析

    R 语言作的开源.自由.免费等特点使其广泛应用于生物群落数据统计分析.生物群落数据多样而复杂,涉及众多统计分析方法.本文以生物群落数据分析中的最常用的统计方法回归和混合效应模型.多元统计分析技术及结构 ...

  10. R语言进行数据聚合统计(Aggregating transforms)计算滑动窗口统计值(Window Statistics):使用R原生方法、data.table、dplyr等方案、计算滑动分组统计

    R语言进行数据聚合统计(Aggregating transforms)计算滑动窗口统计值(Window Statistics):使用R原生方法.data.table.dplyr等方案.计算滑动分组统计 ...

最新文章

  1. 2021年中国工业互联网安全大赛核能行业赛道writeup之usb流量分析
  2. Python培训:try-except语句与else子句联合使用处理可能出现的程序异常
  3. Hacker(十)----常用入侵工具
  4. 阿里云 ubuntu jdk安装及java环境变量设置
  5. ICCV 2019接收论文提前看,旷视11篇入选文章放出 | 资源
  6. Solr安装并导入mysql数据
  7. 【转】使用Feature导入WebPart
  8. 简单python日志抓取脚本
  9. boot入门思想 spring_SpringBoot基础入门
  10. sqlalchemy入门记录
  11. vmware ubuntu 16.04 guest 修复不能桌面大小自动调整和从宿主机复制粘贴的问题
  12. python做前端开发_Python开发【前端】:汇总
  13. 成都电子信息学校计算机专业,成都电子信息学校2020招生简章
  14. 竹子买车商学院,知名汽车人钟志,销售实战培训
  15. 2160亿元电费如何降下来?地方5G“硬核”政策助力
  16. VScode 中查看本地ip地址
  17. 设想一种防U盘病毒的方法,不知道是否管用
  18. 黑色主题的个人引导页,导航页html php源码
  19. n719 rom 卡刷 android 4.3,三星n719卡刷刷机教程(刷第三方rom包)
  20. 怎么把二维码解码成链接地址?

热门文章

  1. css 取偶数节点_CSS选择器:奇偶匹配nth-child(even)
  2. 2022年第一个诺奖揭晓!获奖者的父亲,诺贝尔生理学或医学奖得主
  3. UART嵌入式通信协议(以AVR单片机为例)
  4. Jupyter Nbextensions插件功能大全
  5. Verliog 写电子密码锁
  6. MATLAB绘图—三维网格绘图(mesh)
  7. 咸鱼Maya笔记—Maya 编辑多边形
  8. ANSYS Icepak电子散热基础教程+ANSYS Icepak进阶应用导航案例.zip
  9. 暨南大学计算机系录取分数线,暨南大学2017年在广东省各专业录取分数线
  10. extern关键字作用