数据字符处理函数
2018-08-31
2018-08-31
数据结构-数据字符函数
1 数据准备前期常用函数
数据准备前期函数,以常用的为例进行介绍,如下所示:
函数 | 功能 |
---|---|
getwd() | 查看当前设置的工作目录 |
setwd() | 设置工作目录 |
data() | 查看系统自带的数据 |
str(data) | 查看数据的结构类型 |
head(data) | 查看数据前6行 |
summary(data) | 数据的简单描述统计 |
View(data) | 打开数据视图 |
help(summary) | 函数名称的帮助查询 |
install.packages() | 加载函数包 |
library() | 调用函数包 |
search(搜寻包) | 搜寻R在本地系统的安装包 |
update.packages(更新包的名称) | 更新R包 |
class(查看数据类型) | 查看R的数据类型 |
detach(卸载固定包或对象) | 解绑 |
2 R语言之正则表达式
数据字符函数,以常用的为例进行介绍。
1)字符串匹配
grep() # 字符串匹配
grep(pattern,X) # 可以计算pattern出现在X的第几个元素
pattern:搜索目标的内容
X:字符串向量
grep("A",c("AR","ar","AE","ae"))
## [1] 1 3
从上面执行结果得出A出现在1和3元素中
2)获取字符串长度
nchar() # 获取字符串长度
nchar(c("AR","a","AE","aed"))
## [1] 2 1 2 3
从执行结果得出字符串长度分别为2、1、2、3.
3)获取向量的长度
length() # 取向量的长度
V<-c("AR","ar","AE","ae")
length(V) #获取向量长度
## [1] 4
得出向量的长度为4
4)字符串粘合
paste()
paste(V1,V2,sep=“A”)# 以A为分隔符连接V1,V2
V1<-c("abc","a")
V2<-c("12","d")
paste(V1,V2,sep="-")# 以-为分隔符连接V1,V2
## [1] "abc-12" "a-d"
以“-”为分隔符连接V1,V2,得出结果是“abc-12”,“a-d” 。
5)字符串截取
substr()
substr(X,N,M)
对给定的字符串对象取出子集,其参数是子集所处的起始和终止位置。
1.substr(数据集,start= ,stop= )
substr(state.name,start=4,stop=8)
## [1] "bama" "ska" "zona" "ansas" "iforn" "orado" "necti" "aware"
## [9] "rida" "rgia" "aii" "ho" "inois" "iana" "a" "sas"
## [17] "tucky" "isian" "ne" "yland" "sachu" "higan" "nesot" "sissi"
## [25] "souri" "tana" "raska" "ada" " Hamp" " Jers" " Mexi" " York"
## [33] "th Ca" "th Da" "o" "ahoma" "gon" "nsylv" "de Is" "th Ca"
## [41] "th Da" "nesse" "as" "h" "mont" "ginia" "hingt" "t Vir"
## [49] "consi" "ming"
2.substr(X,n,m)#取X得第n~m的字符
substr("abcdef",3,5)
## [1] "cde"
得出“abcdef”字符串的3-5位的字符为“cde”
6)sub()
sub(pattern,replacement,x)
pattern:搜索的字符串
replacement:要代替的字符串
x:字符串向量
R语言内系统自带的数据集state.name
state.name
## [1] "Alabama" "Alaska" "Arizona" "Arkansas"
## [5] "California" "Colorado" "Connecticut" "Delaware"
## [9] "Florida" "Georgia" "Hawaii" "Idaho"
## [13] "Illinois" "Indiana" "Iowa" "Kansas"
## [17] "Kentucky" "Louisiana" "Maine" "Maryland"
## [21] "Massachusetts" "Michigan" "Minnesota" "Mississippi"
## [25] "Missouri" "Montana" "Nebraska" "Nevada"
## [29] "New Hampshire" "New Jersey" "New Mexico" "New York"
## [33] "North Carolina" "North Dakota" "Ohio" "Oklahoma"
## [37] "Oregon" "Pennsylvania" "Rhode Island" "South Carolina"
## [41] "South Dakota" "Tennessee" "Texas" "Utah"
## [45] "Vermont" "Virginia" "Washington" "West Virginia"
## [49] "Wisconsin" "Wyoming"
将state.name里的带有“New”的州名改为“Old”。
sub("New","Old",state.name)
## [1] "Alabama" "Alaska" "Arizona" "Arkansas"
## [5] "California" "Colorado" "Connecticut" "Delaware"
## [9] "Florida" "Georgia" "Hawaii" "Idaho"
## [13] "Illinois" "Indiana" "Iowa" "Kansas"
## [17] "Kentucky" "Louisiana" "Maine" "Maryland"
## [21] "Massachusetts" "Michigan" "Minnesota" "Mississippi"
## [25] "Missouri" "Montana" "Nebraska" "Nevada"
## [29] "Old Hampshire" "Old Jersey" "Old Mexico" "Old York"
## [33] "North Carolina" "North Dakota" "Ohio" "Oklahoma"
## [37] "Oregon" "Pennsylvania" "Rhode Island" "South Carolina"
## [41] "South Dakota" "Tennessee" "Texas" "Utah"
## [45] "Vermont" "Virginia" "Washington" "West Virginia"
## [49] "Wisconsin" "Wyoming"
7)gsub()
数据框中的函数是gsub,基本书写格式为:
data$变量=gsub(“变量里包含的文字”,data $变量)
data=read.csv("F:/cardata.csv", stringsAsFactors=F) ##导入csv数据
str(data)
## 'data.frame': 799 obs. of 7 variables:
## $ V1: chr "大众-朗逸 2013款 改款 1.4TSI DSG舒适版" "奥迪-A4L 2013款 35 TFSI 自动技术型" "纳智捷-优6 SUV 2016款 1.8T 风尚超值型" "奔驰-GLA 2016款 GLA 200 时尚型" ...
## $ V2: chr "卖家报价:¥8.50万" "卖家报价:¥23.80万" "卖家报价:¥9.50万" "卖家报价:¥26.50万" ...
## $ V3: chr "2013年10月" "2014年4月" "2016年8月" "2016年4月" ...
## $ V4: chr "8.13万公里" "3.56万公里" "1.61万公里" "3.85万公里" ...
## $ V5: chr "国四" "国四" "国四" "国五" ...
## $ V6: chr " 1.4L 排量 " " 2.0L 排量 " " 1.8L 排量 " " 1.6L 排量 " ...
## $ V7: chr "厂商新车指导价:14.79万" "厂商新车指导价:36.98万" "厂商新车指导价:10.98万" "厂商新车指导价:28.98万" ...
如以下,数据是不规整的,对其进行清洗如下
对其变量进行重命名,得到如下数据:
library(plyr) ##加载plyr包(用来重命名变量名)
data=rename(data,c(V1="车名",V2="卖家报价",V3="上牌时间",V4="车程",V5="排放标准",V6="排量",V7="原价")) ##变量重命名
str(data)
## 'data.frame': 799 obs. of 7 variables:
## $ 车名 : chr "大众-朗逸 2013款 改款 1.4TSI DSG舒适版" "奥迪-A4L 2013款 35 TFSI 自动技术型" "纳智捷-优6 SUV 2016款 1.8T 风尚超值型" "奔驰-GLA 2016款 GLA 200 时尚型" ...
## $ 卖家报价: chr "卖家报价:¥8.50万" "卖家报价:¥23.80万" "卖家报价:¥9.50万" "卖家报价:¥26.50万" ...
## $ 上牌时间: chr "2013年10月" "2014年4月" "2016年8月" "2016年4月" ...
## $ 车程 : chr "8.13万公里" "3.56万公里" "1.61万公里" "3.85万公里" ...
## $ 排放标准: chr "国四" "国四" "国四" "国五" ...
## $ 排量 : chr " 1.4L 排量 " " 2.0L 排量 " " 1.8L 排量 " " 1.6L 排量 " ...
## $ 原价 : chr "厂商新车指导价:14.79万" "厂商新车指导价:36.98万" "厂商新车指导价:10.98万" "厂商新车指导价:28.98万" ...
变量重命名后观察数据,按理说报价、车程、排量、原价应该为数值型数值,但在这个数据中由于这几个变量里包含有变量名以及单位所以就成为了字符串型,利用正则表达式里的gsub函数将变量规整。
data$卖家报价=gsub("卖家报价:¥","",data$卖家报价)##报价一般为数值型数据,且此数据卖家报价单位:(万)
data$卖家报价=gsub("万","",data$卖家报价)
data$车程=gsub("万公里","",data$车程)
data$排量=gsub("L 排量","",data$排量)##排量为数值型数据,单位:L
data$原价=gsub("厂商新车指导价:","",data$原价)##原价为数值型数据,单位:万
data$原价=gsub("万","",data$原价)##原价为数值型数据,单位:万
str(data)
## 'data.frame': 799 obs. of 7 variables:
## $ 车名 : chr "大众-朗逸 2013款 改款 1.4TSI DSG舒适版" "奥迪-A4L 2013款 35 TFSI 自动技术型" "纳智捷-优6 SUV 2016款 1.8T 风尚超值型" "奔驰-GLA 2016款 GLA 200 时尚型" ...
## $ 卖家报价: chr "8.50" "23.80" "9.50" "26.50" ...
## $ 上牌时间: chr "2013年10月" "2014年4月" "2016年8月" "2016年4月" ...
## $ 车程 : chr "8.13" "3.56" "1.61" "3.85" ...
## $ 排放标准: chr "国四" "国四" "国四" "国五" ...
## $ 排量 : chr " 1.4 " " 2.0 " " 1.8 " " 1.6 " ...
## $ 原价 : chr "14.79" "36.98" "10.98" "28.98" ...
8)字符串分割
将字符串按照某种分割形式进行划分,是paste()的逆操作。
strsplit()
strsplit(X," “) # 以空格为界,将语句拆成单词
(X<-("Hello World"))
## [1] "Hello World"
以空格为界,将语句“Hello World”拆成单词“Hello”, “World”。