自己写的字符处理函数+字符处理函数
2016-06-03 16:08
253 查看
(1)分割函数:
##############分割函数
Split<-function(mydata)######mydata为数据框,该函数将数据框平均分割成三个,并分别存储在三个表中。在默人位置在R的工作空间中
{
MydataFrame<-data.frame()##定义
x<-length(mydata[,1])##获取行数
MydataFrame<-mydata[1:floor(x/3),]##floor函数是向下取整
write.table(MydataFrame,file="Split1.csv",sep=",",na="NA",row.names = FALSE,col.names = FALSE)
MydataFrame<-mydata[(floor(x/3)+1):(floor(x*(2/3))),]
write.table(MydataFrame,file="Split2.csv",sep=",",na="NA",row.names = FALSE,col.names = FALSE)
MydataFrame<-mydata[(floor(x*(2/3))+1):x,]
write.table(MydataFrame,file="Split3.csv",sep=",",na="NA",row.names = FALSE,col.names = FALSE)
##写入csv文件中,不显示行名列名,分隔符是逗号
}
(2)列表转化成数据框函数
fun<-function(list)##参数data
{
data<-data.frame()
x<-length(list)
for(i in 1:x)
{
data[i,1]<-list[[i]][1]
data[i,2]<-list[[i]][2]
##data[i,3]<-mydata[i,2]
##data[i,4]<-mydata[i,3]
}
return (data)
}
(3)cat("|",data[i,2],sep="")##字符串链接,base包中自带,sep为链接符号参数
(4)去除字符串中的点
k=gsub("\\.","",k)##正则表达式,用gsub()函数去除点
(5)读取书籍并分别保存在表里面。
fun<-function()##书籍读入并保存函数
{
setwd("C:\\中医书籍700本")##将工作空间转移到该目录下
names.files<-dir() ##将工作空间下的目录以字符串的形式,存放在names.files
migrant<-list()##定义空列表表
name="F:\\name.files"
x<-length(names.files)##向量长度
for (i in 1:x)
{
migrant[[i]]<-read.table(file=names.files[i],header=FALSE,stringsAsFactors =FALSE,sep="\t")##按照书籍名字,将所以书读入到列表中
}
for (i in 1:x)
{
filename<-paste(name,i,".csv",sep="")##进行字符串链接,形成自动改名递增的路径名
write.csv(migrant[[i]],filename,append=FALSE)##写入csv文件,共700个
}
}
转载(http://www.r-bloggers.com/lang/chinese/897)
字符串粘合:paste()负责将若干个字符串相连结,返回成单独的字符串。其优点在于,就算有的处理对象不是字符型也能自动转为字符型。
字符串分割:strsplit()负责将字符串按照某种分割形式将其进行划分,它正是paste()的逆操作。
字符串截取:substr()能对给定的字符串对象取出子集,其参数是子集所处的起始和终止位置。
字符串替代:gsub()负责搜索字符串的特定表达式,并用新的内容加以替代。sub()函数是类似的,但只替代第一个发现结果。
字符串匹配:grep()负责搜索给定字符串对象中特定表达式 ,并返回其位置索引。grepl()函数与之类似,但其后面的"l"则意味着返回的将是逻辑值。
一个例子:
我们来看一个处理邮件的例子,目的是从该文本中抽取发件人的地址。该文本在此可以下载到。邮件的全文如下所示:
----------------------------
Return-Path: skip@pobox.com
Delivery-Date: Sat Sep 7 05:46:01 2002
From: skip@pobox.com (Skip Montanaro)
Date: Fri, 6 Sep 2002 23:46:01 -0500
Subject: [Spambayes] speed
Message-ID: <15737.33929.716821.779152@12-248-11-90.client.attbi.com>
If the frequency of my laptop's disk chirps are any indication, I'd say
hammie is about 3-5x faster than SpamAssassin.
Skip
----------------------------
在字符串的复杂操作中通常会包括正则表达式(Regular Expressions),关于这方面内容可以参考?regex
(转载一篇stringr包简介文章)
《Machine Learning for Hackers》一书的合著者John Myles White近日接受了一个访谈。在访谈中他提到了自己在R中常用的几个扩展包,其中包括用ggplot2包来绘图,用glmnet包做回归,用tm包进行文本挖掘,用plyr、reshape、lubridate和stringr包进行数据预处理。这些包本博客大部分都有所介绍,今天就来看看这个遗漏的stringr包。
从名字就看得出,stringr包是用来处理字符串的。R语言本身的字符处理能力已经不错了,但使用起来并不是很方便。stringr包将原本的字符处理函数进行了打包,统一了函数名和参数。在增强功能基础上,还能处理向量化数据并兼容非字符数据。stringr包号称能让处理字符的时间减少95%。下面将其中的一些主要函数罗列一下。
library(stringr)
# 合并字符串
fruit <- c("apple","banana","pe
4000
ar","pinapple")
res <- str_c(1:4,fruit,sep=' ',collapse=' ')
str_c('I want to buy ',res,collapse=' ')
# 计算字符串长度
str_length(c("i","like","programming R",123,res))
# 按位置取子字符串
str_sub(fruit,1,3)
# 子字符串重新赋值
capital <-toupper(str_sub(fruit,1,1))
str_sub(fruit,rep(1,4),rep(1,4))<- capital
# 重复字符串
str_dup(fruit,c(1,2,3,4))
# 加空白
str_pad(fruit,10,"both")
# 去除空白
str_trim(fruit)
# 根据正则表达式检验是否匹配
str_detect(fruit,"a$")
str_detect(fruit,"[aeiou]")
# 找出匹配的字符串位置
str_locate(fruit,"a")
# 提取匹配的部分
str_extract(fruit,"[a-z]+")
str_match(fruit,"[a-z]+")
# 替换匹配的部分
str_replace(fruit,"[aeiou]","-")
# 分割
str_split(res," ")
本文来自: 人大经济论坛 R语言论坛 版,详细出处参考: http://bbs.pinggu.org/forum.php?mod=viewthread&tid=2372269&page=1
(1)分割函数:
##############分割函数
Split<-function(mydata)######mydata为数据框,该函数将数据框平均分割成三个,并分别存储在三个表中。在默人位置在R的工作空间中
{
MydataFrame<-data.frame()##定义
x<-length(mydata[,1])##获取行数
MydataFrame<-mydata[1:floor(x/3),]##floor函数是向下取整
write.table(MydataFrame,file="Split1.csv",sep=",",na="NA",row.names = FALSE,col.names = FALSE)
MydataFrame<-mydata[(floor(x/3)+1):(floor(x*(2/3))),]
write.table(MydataFrame,file="Split2.csv",sep=",",na="NA",row.names = FALSE,col.names = FALSE)
MydataFrame<-mydata[(floor(x*(2/3))+1):x,]
write.table(MydataFrame,file="Split3.csv",sep=",",na="NA",row.names = FALSE,col.names = FALSE)
##写入csv文件中,不显示行名列名,分隔符是逗号
}
(2)列表转化成数据框函数
fun<-function(list)##参数data
{
data<-data.frame()
x<-length(list)
for(i in 1:x)
{
data[i,1]<-list[[i]][1]
data[i,2]<-list[[i]][2]
##data[i,3]<-mydata[i,2]
##data[i,4]<-mydata[i,3]
}
return (data)
}
(3)cat("|",data[i,2],sep="")##字符串链接,base包中自带,sep为链接符号参数
(4)去除字符串中的点
k=gsub("\\.","",k)##正则表达式,用gsub()函数去除点
(5)读取书籍并分别保存在表里面。
fun<-function()##书籍读入并保存函数
{
setwd("C:\\中医书籍700本")##将工作空间转移到该目录下
names.files<-dir() ##将工作空间下的目录以字符串的形式,存放在names.files
migrant<-list()##定义空列表表
name="F:\\name.files"
x<-length(names.files)##向量长度
for (i in 1:x)
{
migrant[[i]]<-read.table(file=names.files[i],header=FALSE,stringsAsFactors =FALSE,sep="\t")##按照书籍名字,将所以书读入到列表中
}
for (i in 1:x)
{
filename<-paste(name,i,".csv",sep="")##进行字符串链接,形成自动改名递增的路径名
write.csv(migrant[[i]],filename,append=FALSE)##写入csv文件,共700个
}
}
转载(http://www.r-bloggers.com/lang/chinese/897)
字符串粘合:paste()负责将若干个字符串相连结,返回成单独的字符串。其优点在于,就算有的处理对象不是字符型也能自动转为字符型。
字符串分割:strsplit()负责将字符串按照某种分割形式将其进行划分,它正是paste()的逆操作。
字符串截取:substr()能对给定的字符串对象取出子集,其参数是子集所处的起始和终止位置。
字符串替代:gsub()负责搜索字符串的特定表达式,并用新的内容加以替代。sub()函数是类似的,但只替代第一个发现结果。
字符串匹配:grep()负责搜索给定字符串对象中特定表达式 ,并返回其位置索引。grepl()函数与之类似,但其后面的"l"则意味着返回的将是逻辑值。
一个例子:
我们来看一个处理邮件的例子,目的是从该文本中抽取发件人的地址。该文本在此可以下载到。邮件的全文如下所示:
----------------------------
Return-Path: skip@pobox.com
Delivery-Date: Sat Sep 7 05:46:01 2002
From: skip@pobox.com (Skip Montanaro)
Date: Fri, 6 Sep 2002 23:46:01 -0500
Subject: [Spambayes] speed
Message-ID: <15737.33929.716821.779152@12-248-11-90.client.attbi.com>
If the frequency of my laptop's disk chirps are any indication, I'd say
hammie is about 3-5x faster than SpamAssassin.
Skip
----------------------------
# 用readLines函数从本地文件中读取邮件全文。 data <- readLines('data') # 判断对象的类,确定是一个文本型向量,每行文本是向量的一个元素。 class(data) # 从这个文本向量中找到包括有"From:"字符串的那一行 email <- data[grepl('From:',data)] #将其按照空格进行分割,分成一个包括四个元素的字符串向量。 from <- strsplit(email,' ') # 上面的结果是一个list格式,转成向量格式。 from <- unlist(from) # 最后搜索包含'@'的元素,即为发件人邮件地址。 from <- from[grepl('@',from)]
在字符串的复杂操作中通常会包括正则表达式(Regular Expressions),关于这方面内容可以参考?regex
(转载一篇stringr包简介文章)
《Machine Learning for Hackers》一书的合著者John Myles White近日接受了一个访谈。在访谈中他提到了自己在R中常用的几个扩展包,其中包括用ggplot2包来绘图,用glmnet包做回归,用tm包进行文本挖掘,用plyr、reshape、lubridate和stringr包进行数据预处理。这些包本博客大部分都有所介绍,今天就来看看这个遗漏的stringr包。
从名字就看得出,stringr包是用来处理字符串的。R语言本身的字符处理能力已经不错了,但使用起来并不是很方便。stringr包将原本的字符处理函数进行了打包,统一了函数名和参数。在增强功能基础上,还能处理向量化数据并兼容非字符数据。stringr包号称能让处理字符的时间减少95%。下面将其中的一些主要函数罗列一下。
library(stringr)
# 合并字符串
fruit <- c("apple","banana","pe
4000
ar","pinapple")
res <- str_c(1:4,fruit,sep=' ',collapse=' ')
str_c('I want to buy ',res,collapse=' ')
# 计算字符串长度
str_length(c("i","like","programming R",123,res))
# 按位置取子字符串
str_sub(fruit,1,3)
# 子字符串重新赋值
capital <-toupper(str_sub(fruit,1,1))
str_sub(fruit,rep(1,4),rep(1,4))<- capital
# 重复字符串
str_dup(fruit,c(1,2,3,4))
# 加空白
str_pad(fruit,10,"both")
# 去除空白
str_trim(fruit)
# 根据正则表达式检验是否匹配
str_detect(fruit,"a$")
str_detect(fruit,"[aeiou]")
# 找出匹配的字符串位置
str_locate(fruit,"a")
# 提取匹配的部分
str_extract(fruit,"[a-z]+")
str_match(fruit,"[a-z]+")
# 替换匹配的部分
str_replace(fruit,"[aeiou]","-")
# 分割
str_split(res," ")
本文来自: 人大经济论坛 R语言论坛 版,详细出处参考: http://bbs.pinggu.org/forum.php?mod=viewthread&tid=2372269&page=1
相关文章推荐
- msql 正则表达式
- 正则表达式
- Mootools 1.2教程 函数
- autoit InputBox 函数
- Mootools 1.2教程 正则表达式
- 文件遍历排序函数
- 关于C#中排序函数的总结
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- 批处理FINDSTR正则表达式用法实例分析
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结