1、三种常见的清洗数据
1)重复值数据
定义:把数据结构中,行数据相同的剔除
unique 函数语法: unique (x)
案例:
导入csv数据: data <- read.csv ( "sales.csv")
删除重复数据: new_data1 <- unique (data ) ---删除的为所有字段均重复的记录行
2)缺失值数据
处理方式:
数据补齐
删除对应缺失行
na.omit 函数作用:剔除数据结构中值为空(即缺失值以NA表示)的数据
na.omit 函数语法: na.omit (x)
案例: new_data2 <- na.otmi (data)
不处理
3)空格值数据
trim 函数作用:清除字符型数据前后的空格
trim 函数语法: trim (x)
案例: new_data3 <- trim (data)
注:trim 函数来自 raster包,使用前,先使用 install.packages("raster") 安装,再使用 library (raster) 引入该包;
数据基础
1、常见的三种数据类型
1)逻辑型(Logical):TRUE/FALSE
2)数值型(Numeric)
3)字符型(Character)
2
2、所有的对象都有两个属性:
1)类型: mode (x)
2)长度: length (x)
3
3、常用的两种数据结构
1)向量(Vertor)
定义:通过 c()函数来定义
限制:一个向量只允许存放一种数据类型
访问:通过方括号内的索引值(位置值)来访问数据
2)数据框(Frame)
定义:通过 data.frame()函数来定义
限制:一列只允许存放一种数据类型
访问:通过方括号内的行列位置值来访问数据
可视化编辑工具(函数): fix (data.frame)
数据导出
1、导出文本文件
1)write.table函数语法:
write.table (x, file ="", sep ="", row.names =TRUE, col.names =TRUE, quote =TRUE)
x:需要导出的数据
file:导出的文件路径
sep:分隔符,默认为空格(" "),也就是以空格为分割列
row.names:是否导出行序号,默认为TRUE,也就是导出行序号
col.names:是否导出列名,默认为TRUE,也就是导出列名
quote:字符串是否使用引号表示,默认为TRUE,也就是使用引号表示
2
2)案列:
先生成一个数据框(生成数据!)
age <- c (22,23)
name <- c ("ken", "john")
f <- data.frame (age, name)
再导出数据框数据(导出数据!)
write.table (f, file ="f.csv") ---以空格分隔数据列(默认),含行号(默认),含列名(默认),字符串带引号
write.table (f,file ="f.csv", sep =",") ---以逗号分隔数据列,含行号(默认),含列名(默认),字符串带引号
write.table (f,file ="f.csv", sep =",", row.names = FALSE) ---以逗号分隔数据列,不含行号,含列名(默认),字符串带引号
write.table (f,file ="f.csv", row.names = FALSE, col.names =FALSE) ---以空格分隔数据列,不含行号,不含列名,字符串带引号
write.table (f,file ="f.csv", row.names = FALSE, col.names =FALSE, quote =FALSE) ---以空格分隔数据列,不含行号,不含列名,字符串不带引号
数据导入
1、导入 CSV文件
1)使用 read.csv函数导入CSV文件
2)read.csv函数语法: read.csv (file)
3)案例: data1 <- read.csv ("D:/data/datatable.csv") --绝对路径
2
2、导入文本文件
1)使用 read.table函数导入CSV文件
2)read.table函数语法: read.table (file, header = FALSE, sep="", …)
file:文件路径
header:文件标题行(文件头),默认为 FALSE,表示没有标题行
sep:分隔符,默认为空,表示默认把数据导入成一列
3)案例
data2 <- read.table ("D:/data/datatable.csv", header = TRUE, sep ="," )
data3 <- read.csv ("D:/data/datatable.csv", header = TRUE, sep ="," )
4)导入数据
read.table(file.choose())
3、导入 Excel文件
1) Excel文件导入步骤(x86操作系统)
引入 RODBC包
install.packages ("RODBC")
library (RODBC)
library(RODBC)
db <- odbcConnect(dsn="buobserv", uid="buobserv", pwd="buobserv", believeNRows=FALSE )
shop = sqlQuery(db, "select * from BAIDU_WAIMAI_SHOP_20161110")
注:安装包时,包名需要加引号,而引入包时不加引号!
使用 odbcConnectExcel函数来连接 Excel 2003(后缀名为 .xls)
odbcConnectExcel函数语法: odbcConnectExcel (file)
案例: connect1 <- odbcConnectExcel ("D:/data/datatable.xls")
使用 odbcConnectExcel2007函数来连接 Excel 2007(后缀名为 .xlsx)
odbcConnectExcel函数语法: odbcConnectExcel2007 (file)
案例: connect2 <- odbcConnectExcel ("D:/data/datatable.xlsx")
使用 sqlFetch函数来读取 Excel中的 Sheet数据
sqlFetch函数语法: sqlFetch (connectname, Sheetname)
案例:data4 <- sqlFetch (connect1, "datasheet")
使用 odbcClose函数关闭 R和 Excel的连接
odbcClose函数语法: odbcClose (connectname)
案例: odbcClose (connect1)
2)Excel文件导入步骤(x64操作系统)
引入 XLConnect包(需安装JDK程序)
使用 loadworkbook函数来加载 Excel文件
loadworkbook函数语法: loadworkbook (file)
案例: connect3 <- loadworkbook ("D:/data/datatable.xls")
使用 readworksheet函数来读取 Excel文件数据
readworksheet函数语法: readworksheet (connectname, Sheetname)
案例: data5 <- readworksheet (connect1, "datasheet")
数据抽取
1、常见的四种数据抽取方式:
1)字段抽取(字符抽取)
字段截取函数: substr (x, start, stop) ---此函数语法规则类似Excel中的 mid函数
x:需要处理的字段/字符
start:开始位置
stop:结束位置
案例:
导入csv数据: data <- read.csv ("sales.csv")
截取指定字段:firstname <- substr (data[,1],1,1) ---取 data表第一列字段的第一个字符(从第一个开始到第一个结束)
组合新数据:new_data1 <- data.frame (firstname, data) ---将新提取的 firstname字段放置在原表 data的第一列组合成新表 new_data1
2)字段拆分
字段分割函数: str_split_fixed (x, split, n)
x:需要处理的字段/字符
split:用于分割的字符串
n:分隔为多少列
返回值: data.frame
注:str_split_fixed 函数使用前,先使用 install.packages (stringr) 安装,再使用 library (stringr) 引用该包
案例1(单行数据):
item <- "Apple iPad mini MF432CH/A 7.9英寸平板电脑 (16G WiFi版)深空灰定制版" ---商品名称
band <- str_split_fixed (item, " ", n=2) ---截取商品名称 item中的品牌,以空格分割,分为2列
案例2(多行数据):
items <- read.csv ('sales.csv', stringsAsFactors = FALSE, fileEncoding='utf-8') ---字符串是否转换为因子格式
bands <- str_split_fixed (items[, 1], " ", n=2) ---运行结果以数据框结构形式体现----比较重要
new_items <- data.frame (bands[,1], items) ---将截取出的 bands表第1列品牌与原表 item组合成新表 new_items表
3)记录抽取
记录抽取函数: subset (x, condition)
x:需要处理的数据
condition:过滤条件
返回值: data.frame
案例:
items <- read.table('sales.csv', sep="|", header=TRUE, fileEncoding='utf-8', stringsAsFactors=FALSE)
sub_items <- subset(items, comments>10000) ---提取 comments大于10000的记录
2
4)随机抽样
随机抽样函数: sample (length, size, replace = FASLE)
length:样本长度
size:抽样行数
replace:是否可回收样本,默认为不放回,即FALSE
返回值:行数的位置值数组
案例:
items <- read.csv ('sales.csv') ---导入数据
rows <- nrow (items) ---数据记录行,即抽样行数length
indexes <- sample (rows, 3, replace =TRUE) ---使用 sample函数,在 rows(10行)抽取3个数据(抽取的是数据行位置行号)
data1 <- items [indexes, ] ---提取