就是说你要处理的变量 roster$Scudents 不是字符变量,所以你现在要做的是2件事
看看数据库roster里的Scudents这个列是不是真的都是字符变量,可以用class(roster$Scudents)来检查,如果是character就正确了。
如果不是,那你得强行转换,用roster$Scudents<-ascharacter(roster$Scudents)
1、将数据通过group,by分组,之后n负1会返回每组中倒数第二的位置,之后slice,n负1提取我们要的数据。
2、通过group,split将数据源转换为list,使用map函数将在list每个子项中使用,增加代码ungroup即可。
2nchar(字符串/向量):返回每个元素字符串的个数
下面这个截图可以形象的说明两者之间的区别:
3paste(向量/字符串):用于粘贴字符串,将多个字符串合并成一个:
5paste函数连接向量和字符串,根据R语言向量化处理的逻辑,并不是将字符串添加到向量的尾部,而是向量中的 每个 元素分别与字符串相连。
1 substr函数 用于提取字符串,很有用的函数,函数的参数分别是一个原始的字符串,一个起始点和一个结束点,函数返回起始点和结束点之间的字符串
sub函数 只进行一次替换, gsub函数 进行全局替换
2 gsub函数 :向量中的每个字符的第一个字母都变成大写,括号里面写成正则表达式替换的形式,其中倒三角 ^ 表示首字母, \w 表示字符集的简写,代表所有小写字符, \U 表示转化为大写, \L 表示转化为小写,后面的 1 表示只转换一次。后面接perl逻辑值
1 grep函数 用于在字符串中搜索某种模式,fixed函数是是否进行正则表达式,如果 fixed=FALSE ,则支持正则表达式;如果 fixed=TURE ,则搜索模式为一个文本字符串,返回值为匹配的下标。
结果:
1 strsplit函数 用于字符串分割,根据固定规则将一个长的字符串分割为多份,在字符串处理中,分割字符串也是关键的步骤之一,函数返回列表而非向量。这是因为第一个参数的字符串可以是一个向量,向量中可以包含多个子串,返回时是列表也方便处理。
有两个字符串,我们需要生成他们的所有组合,这也叫做笛卡尔积,在实际问题中也很常用,这需要使用到 outer函数
想了一个比较笨的方法。先在R里定义这个函数:
splitstring<-function(string){str2<-strsplit(string,"")[[1]]
stringsplit<-NULL
j<-1
stringsplit[j]<-str2[1]
findtype<-function(char){
if(grepl("[[:alpha:]]",char))
type<-"alphabet"
else if(grepl("[[:digit:]]",char))
type<-"digit"
else type<-"chinese"
type
}
type<-findtype(str2[1])
for(i in 2:length(str2)){
type2<-findtype(str2[i])
if(type2==type) stringsplit[j]<-paste(stringsplit[j],str2[i],sep="")
else{
j<-j+1
type<-type2
stringsplit<-c(stringsplit,str2[i])
}
}
stringsplit
}
直接跑
splitstring("中国123abc")就好了
如果要区分更多的东西,就改一下内部的findtype()函数。我现在写的只能区分字母、数字和其他东西(比如标点和中文就分不开了)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)