(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)去除字符串中的点
{
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个
}
}
字符串分割: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)]
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