R语言,“ name<-strsplit((roster$Students)," ")”为什么报错?

R语言,“ name<-strsplit((roster$Students)," ")”为什么报错?,第1张

就是说你要处理的变量 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即可。

1length(字符串/向量):返回向量中元素的个数

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()函数。我现在写的只能区分字母、数字和其他东西(比如标点和中文就分不开了)。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12185336.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存