自己写的字符处理函数+字符处理函数

来源:互联网 发布:mac epub mobi 转换 编辑:程序博客网 时间:2024/04/30 04:41


(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","pear","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

0 0