R语言常用的字符串或变量拆分函数有 substr split strsplit tstrsplit
substr 主要是提取或是替换一个字符向量中的子字符串。
> substr("abcdef", 2, 4) #从字符串“abcdef”中提取出第2到4个位置上的字符
[1] "bcd"
> substring("abcdef", 1:6, 1:6) #从字符串“abcdef”中提取出第1到1、2到2—6到6位置上的字符,即把字符串单个化
[1] "a" "b" "c" "d" "e" "f"
split 主要是用定义的f函数来将向量V进行分离。
例:
require(stats) #加载stats包
n <- 10; nn <- 100
x <- rnorm(n * nn) + sqrt(as.numeric(g)) #生成随机数x
f <- c(1:8) #分离函数f
split(x, f) #用f将随机数x分离,即分离成8份
> split(x, f)
$`1`
[1] 1.47442576 2.80564890 2.14614596 3.20958535 2.90331051 2.27517852 2.31779222 2.36806067 2.97523054
tstrsplit是data.table包里面的一个函数, 它跟transpose函数类似, 主要是对变量用strsplit函数作用再进行转置,形成一个独立的列。
strsplit主要是根据子字符串中与此相匹配的字符将向量进行分割,分割后的内容不包含该字符的列表。
> x <- c(as = "asfef", qu = "qwerty", "yuiop[", "b", "stuff.blah.yech")
> x
as qu
"asfef" "qwerty" "yuiop[" "b" "stuff.blah.yech"
> strsplit(x, "e")
$as
[1] "asf" "f"
$qu
[1] "qw" "rty"
[[3]]
[1] "yuiop["
[[4]]
[1] "b"
[[5]]
[1] "stuff.blah.y" "ch"
例:
> x = c("abcde", "ghij", "klmnopq") #x 为三个字条串组成的向量
> strsplit(x, "", fixed=TRUE) #用strsplit 把每个字符串中的字符给分离出来形成列表中单独的元素,总共有三个元素
[[1]]
[1] "a" "b" "c" "d" "e"
[[2]]
[1] "g" "h" "i" "j"
[[3]]
[1] "k" "l" "m" "n" "o" "p" "q"
> tstrsplit(x, "", fixed=TRUE) #用tstrsplit 把每个字符串中的字符给分离出来并进行了转置,列表中第一个元素为向量中每个元素的第一个字符,共七个元素
[[1]]
[1] "a" "g" "k"
[[2]]
[1] "b" "h" "l"
[[3]]
[1] "c" "i" "m"
[[4]]
[1] "d" "j" "n"
[[5]]
[1] "e" NA "o"
[[6]]
[1] NA NA "p"
[[7]]
[1] NA NA "q"
> DT = data.table(x=c("A/B", "A", "B"), y=1:3) #DT为三行两列的数据表
> DT
x y
1: A/B 1
2: A 2
3: B 3
> DT[, c("c1", "c2") := tstrsplit(x, "/", fixed=TRUE)][] #用tstrsplit函数将变量x分离开形成新的变量c1和c2
x y c1 c2
1: A/B 1 A B
2: A 2 A NA
3: B 3 B NA