R语言--数据预处理

一、日期时间、字符串的处理

日期

Date: 日期类,年与日

POSIXct: 日期时间类,精确到秒,用数字表示

POSIXlt: 日期时间类,精确到秒,用列表表示

Sys.date(), date(), difftime(), ISOdate(), ISOdatetime()

#得到当前日期时间
(d1=Sys.Date())   #日期        年月日
(d3=Sys.time())   #时间        年月日时分秒  通过format输出指定格式的时间
(d2=date())       #日期和时间  年月日时分秒  "Fri Aug 20 11:11:00 1999"

myDate=as.Date(‘2007-08-09‘)
class(myDate)     #Date
mode(myDate)      #numeric

#日期转字符串
as.character(myDate)

birDay=c(‘01/05/1986‘,‘08/11/1976‘) #
dates=as.Date(birDay,‘%m/%d/%Y‘)    #向量化运算,对向量进行转换
dates

# %d    天 (01~31)
# %a    缩写星期(Mon)
# %A    星期(Monday)
# %m    月份(00~12)
# %b    缩写的月份(Jan)
# %B    月份(January)
# %y    年份(07)
# %Y    年份(2007)
# %H    时
# %M    分
# %S    秒

td=Sys.Date()
format(td,format=‘%B  %d %Y %s‘)
format(td,format=‘%A,%a ‘)
format(Sys.time(), ‘%H %h %M %S %s‘)

#日期转换成数字
as.integer(Sys.Date())  #自1970年1月1号至今的天数
as.integer(as.Date(‘1970-1-1‘)) #0
as.integer(as.Date(‘1970-1-2‘)) #1

sdate=as.Date(‘2004-10-01‘)
edate=as.Date(‘2010-10-22‘)
days=edate-sdate
days    #时间类型相互减,结果显示相差的天数

ws=difftime(Sys.Date(),as.Date(‘1956-10-12‘),units=‘weeks‘) #可以指定单位

#把年月日拼成日期
(d=ISOdate(2011,10,2));class(d)  #ISOdate 的结果是POSIXct
as.Date(ISOdate(2011,10,2))     #将结果转换为Date

ISOdate(2011,2,30)             #不存在的日期 结果为NA

#批量转换成日期
years=c(2010,2011,2012,2013,2014,2015)
months=1
days=c(15,20,21,19,30,3)

as.Date(ISOdate(years,months,days))

#提取日期时间的一部分
p=as.POSIXlt(Sys.Date())
p=as.POSIXlt(Sys.time())
Sys.Date()
Sys.time()
p$year + 1900   #年份需要加1900
p$mon + 1       #月份需要加1
p$mday

p$hour
p$min
p$sec

 

字符串处理

nchar() 、length()

paste()、outer()
substr()、strsplit()
sub()、gsub()、grep()、regexpr()、grepexpr()

 1 #字符串
 2 x=‘hello\rwold\n‘
 3
 4 cat(x)    #woldo  hello遇到\r光标移到头接着打印wold覆盖了之前的hell变成woldo
 5 print(x)  #
 6 #字符串长度
 7 nchar(x)  #字符串长度
 8 length(x) #1 向量中元素的个数
 9
10 #字符串拼接
11 board=paste(‘b‘,1:4,sep=‘-‘) #"b-1" "b-2" "b-3" "b-4"
12 board
13
14 mm=paste(‘mm‘,1:3,sep=‘-‘)   #"mm-1" "mm-2" "mm-3"
15 mm
16
17 outer(board,mm,paste,sep=‘:‘) #向量的外积
18   #[,1]       [,2]       [,3]
19   #[1,] "b-1:mm-1" "b-1:mm-2" "b-1:mm-3"
20   #[2,] "b-2:mm-1" "b-2:mm-2" "b-2:mm-3"
21   #[3,] "b-3:mm-1" "b-3:mm-2" "b-3:mm-3"
22   #[4,] "b-4:mm-1" "b-4:mm-2" "b-4:mm-3"
23
24
25 #拆分提取
26 board
27 substr(board,3,3) #子串
28 strsplit(board,‘-‘,fixed=T) #拆分
29
30 #修改
31 sub(‘-‘,‘.‘,board,fixed=T) #修改指定字符
32 board
33 mm                 #"mm-1" "mm-2" "mm-3"
34 sub(‘m‘,‘p‘,mm)    #替换第一个匹配项 "pm-1" "pm-2" "pm-3"
35 gsub(‘m‘,‘p‘,mm)   #替换全部匹配项 "pp-1" "pp-2" "pp-3"
36
37
38 #查找
39 mm=c(mm, ‘mm4‘)   #"mm-1" "mm-2" "mm-3" "mm4"
40 mm
41 grep(‘-‘,mm)      #1 2 3 向量中1,2,3包含‘-‘
42
43 regexpr(‘-‘,mm)   #匹配成功会返回位置信息,没有找到则返回-1

二、数据预处理

保证数据质量

准确性
完整性
一致性
冗余性
时效性

...

1、提取有效数据,需要业务人员配合(主观),及相关的技术手段保障

2、了解数据定义,统一对数据定义的理解

...

数据集成 : 对多数据源进行整合
数据转换 :
数据清洗 : 异常数据,缺失数据
数据约简 : 提炼,行,列

三、数据集成

通过merge对数据进行集成

 1 #数据集成
 2 #merge pylr::join (包::函数)
 3 (customer = data.frame(Id=c(1:6),State=c(rep("北京",3),rep("上海",3))))
 4 (ol = data.frame(Id=c(1,4,6,7),Product=c(‘IPhone‘,‘Vixo‘,‘mi‘,‘Note2‘)))
 5
 6
 7 merge(customer,ol,by=(‘Id‘))  #inner join
 8 merge(customer,ol,by=(‘Id‘),all=T) # full join
 9 merge(customer,ol,by=(‘Id‘),all.x=T)  # left outer join 左链接,左边数据都在
10 merge(customer,ol,by=(‘Id‘),all.y=T)  # right outer join 右链接,右边数据都在
11
12
13 #union 去重 在df1 和df2 有相同的列名称下
14 (df1=data.frame(id=seq(0,by=3,length=5),name=paste(‘Zhang‘,seq(0,by=3,length=5))))
15 (df2=data.frame(id=seq(0,by=4,length=4),name=paste(‘Zhang‘,seq(0,by=4,length=4))))
16
17 rbind(df1,df2)
18
19 merge(df1,df2,all=T)     #去重,不使用by
20
21 merge(df1,df2,by=(‘id‘)) #重名的列会被更改显示

四、数据转换

构造属性
规范化(极差化、标准化)
离散化
改善分布

时间: 2024-10-14 14:32:58

R语言--数据预处理的相关文章

R语言数据操作之apply系列

1 ###################R语言中apply类型问题 2 data<-data.frame(x=c(1,2,3,4),y=c(2,3,4,5),z=c(5,6,7,8)) 3 apply(data,2,mean)##apply针对数据框 4 lapply(data,mean)##lapply针对list,当然对dataframe也有效 5 data1<-list(a=1:10,b=exp(-3:3),c=c(FALSE,FALSE,FALSE)) 6 lapply(data1,

《美团 R 语言数据运营实战》

美团 R 语言数据运营实战 2018年08月02日 作者: 喻灿 刘强 文章链接 3689字 8分钟阅读 一.引言 近年来,随着分布式数据处理技术的不断革新,Hive.Spark.Kylin.Impala.Presto 等工具不断推陈出新,对大数据集合的计算和存储成为现实,数据仓库/商业分析部门日益成为各类企业和机构的标配.在这种背景下,是否能探索和挖掘数据价值,具备精细化数据运营的能力,就成为判定一个数据团队成功与否的关键. 在数据从后台走向前台的过程中,数据展示是最后一步关键环节.与冰冷的表

第三篇:R语言数据可视化之条形图

条形图简介 数据可视化中,最常用的图非条形图莫属,它主要用来展示不同分类(横轴)下某个数值型变量(纵轴)的取值.其中有两点要重点注意: 1. 条形图横轴上的数据是离散而非连续的.比如想展示两商品的价格随时间变化的走势,则不能用条形图,因为时间变量是连续的: 2. 有时条形图的值表示数值本身,但也有时是表示数据集中的频数,不要引起混淆: 绘制基本条形图 本例选用测试数据集如下: 绘制方法是首先调用ggplot函数选定数据集,并在aes参数中指明横轴纵轴.然后调用条形图函数geom_bar(stat

第二篇:R语言数据可视化之数据塑形技术

前言 绘制统计图形时,半数以上的时间会花在调用绘图命令之前的数据塑型操作上.因为在把数据送进绘图函数前,还得将数据框转换为适当格式才行. 本文将给出使用R语言进行数据塑型的一些基本的技巧,更多技术细节推荐参考<R语言核心手册>. 数据框塑型 1. 创建数据框 - data.frame() # 创建向量p p = c("A", "B", "C") # 创建向量q q = 1:3 # 创建数据框:含p/q两列 dat = data.fra

第四篇:R语言数据可视化之折线图、堆积图、堆积面积图

前言 折线图通常用来对两个连续变量的依存关系进行可视化,其中横轴很多时候是时间轴. 但横轴也不一定是连续型变量,可以是有序的离散型变量. 绘制基本折线图 本例选用如下测试数据集: 绘制方法是首先调用ggplot函数选定数据集,并在aes参数中指明横轴纵轴.然后调用条形图函数geom_line()便可绘制出基本折线图.R语言示例代码如下: # 基函数 ggplot(BOD, aes(x = Time, y = demand)) + # 折线图函数 geom_line()     运行结果: 向折线

R语言数据可视化之散点图

散点图简介 散点图通常是用来表述两个连续变量之间的关系,图中的每个点表示目标数据集中的每个样本. 同时散点图中常常还会拟合一些直线,以用来表示某些模型. 回到顶部 绘制基本散点图 本例选用如下测试数据集: 绘制方法是首先调用ggplot函数选定数据集,并在aes参数中指明横轴纵轴.然后调用散点图函数geom_point()便可绘制出基本散点图.R语言示例代码如下: 1 2 3 4 # 基函数 ggplot(ah, aes(x = ageYear, y = heightIn)) +   # 散点图

第五篇:R语言数据可视化之散点图

散点图简介 散点图通常是用来表述两个连续变量之间的关系,图中的每个点表示目标数据集中的每个样本. 同时散点图中常常还会拟合一些直线,以用来表示某些模型. 绘制基本散点图 本例选用如下测试数据集: 绘制方法是首先调用ggplot函数选定数据集,并在aes参数中指明横轴纵轴.然后调用散点图函数geom_point()便可绘制出基本散点图.R语言示例代码如下: # 基函数 ggplot(ah, aes(x = ageYear, y = heightIn)) + # 散点图函数 geom_point()

R语言数据合并使用merge数据追加使用rbind和cbind

R语言中的横向数据合并merge及纵向数据合并rbind的使用 我们经常会遇到两个数据框拥有相同的时间或观测值,但这些列却不尽相同.处理的办法就是使用merge(x, y ,by.x = ,by.y = ,all = ) 函数. #合并ID<-c(1,2,3,4)name<-c("A","B","C","D")score<-c(60,70,80,90)student1<-data.frame(ID,na

R语言数据去重

R语言常用的去重命令有unique duplicated unique主要是返回一个把重复元素或行给删除的向量.数据框或数组 > x <- c(3:5, 11:8, 8 + 0:5)> x [1]  3  4  5 11 10  9  8  8  9 10 11 12 13> unique(x)[1]  3  4  5 11 10  9  8 12 13> unique(x, fromLast = TRUE)[1]  3  4  5  8  9 10 11 12 13