colsplit分裂为单个字符

时间:2014-07-19 13:37:46

标签: regex r reshape2

colsplit中的

reshape2可用于拆分字符数据:

colsplit(c("A_1", "A_2", "A_3"), pattern="_", c("Letter", "Number"))
  Letter Number
1      A      1
2      A      2
3      A      3

在他的论文"Rehaping data with the Reshape Package"中,Hadley Wickham举了一个使用colsplit将数据拆分成单个字符的例子。他的例子应该通过省略模式参数从数据c("A1", "A2", "A3")产生上述内容。但这会引发错误。

str_split_fixed colsplit来电说明设置pattern=""将分成单个字符的文档,但这不起作用。

有没有办法使用colsplit以便它分成单个字符。

这是R 3.1.1,包是最新的。

2 个答案:

答案 0 :(得分:2)

问题是你指的是一篇关于“重塑”但正在使用“reshape2”的文章。两者不一样,但它们的工作方式不同:

library(reshape)
library(reshape2)

reshape:::colsplit(c("A1", "A2", "A3"), "", c("V1", "V2"))
#   V1 V2
# 1  A  1
# 2  A  2
# 3  A  3
reshape2:::colsplit(c("A1", "A2", "A3"), "", c("V1", "V2"))
#   V1 V2
# 1 NA A1
# 2 NA A2
# 3 NA A3

如果您不必采用colsplit方式,还有其他选择:

do.call(rbind, strsplit(c("A1", "A2", "A3"), "", fixed = TRUE))
#      [,1] [,2]
# [1,] "A"  "1" 
# [2,] "A"  "2" 
# [3,] "A"  "3"

或者,更通用的方法(例如字符后跟数字,不一定是每个字符):

do.call(rbind, strsplit(c("A1", "A2", "A3"), 
                        split = "(?<=[a-zA-Z])(?=[0-9])", 
                        perl = TRUE))
#      [,1] [,2]
# [1,] "A"  "1" 
# [2,] "A"  "2" 
# [3,] "A"  "3"

答案 1 :(得分:1)

使用qdap

library(qdap)
colSplit(c("A1", "A2", "A3"), "")

##   X1 X2
## 1  A  1
## 2  A  2
## 3  A  3