R语言 --- split 二三事

Python029

R语言 --- split 二三事,第1张

最近有很多对文件的操作,经常使用到split函数,但是存在三个split函数,有时候会弄混,谨以此文以记之。

1. split()

2. str_spit()

3. strsplit()

总结: split(参数):split(向量/列表/数据框,因子/因子列表)

split()函数可以分组数据框和向量,返回list。

可以直接使用unsplit()。

split是按照factor去切分vector或者数据框,因此不能这样用:

切割数据框的用法:

针对vector的用法:

str_spllit()主要用于 split a vector of strings. 返回一个list。

str_spllit_fixed()可以返回一个matrix。

举个栗子:

上栗子:

data.txt

思路:

1 strsplit切割,切割后的结果是列表格式,用unlist转成数组

2 用paste(c(), collapse="_")把菌科菌属粘贴到一起

paste(a, b, sep="")是另一种用法

3 门信息单独提取

4 利用循环把结果收集到new_name phylum

菌科_菌属:

想了一个比较笨的方法。先在R里定义这个函数:

split.string<-function(string){

    str2<-strsplit(string,"")[[1]]

    string.split<-NULL

    j<-1

    string.split[j]<-str2[1]

    find.type<-function(char){

        if(grepl("[[:alpha:]]",char))

            type<-"alphabet"

        else if(grepl("[[:digit:]]",char))

            type<-"digit"

        else type<-"chinese"

        type

    }

    type<-find.type(str2[1])

    for(i in 2:length(str2)){

        type2<-find.type(str2[i])

        if(type2==type) string.split[j]<-paste(string.split[j],str2[i],sep="")

        else{

            j<-j+1

            type<-type2

            string.split<-c(string.split,str2[i])

        }

    }

    string.split

}

直接跑

split.string("中国123abc")

就好了

如果要区分更多的东西,就改一下内部的find.type()函数。我现在写的只能区分字母、数字和其他东西(比如标点和中文就分不开了)。