繁体   English   中英

R-将一列文字分为两列,没有分隔符

[英]R - Splitting a column text into 2 columns without delimiter

我需要操纵以下数据帧(数据),以便将PATCH_CODE列拆分为2个结果列,其中第一列包含字符串的字母,第二列包含数字,如下面的第二个示例数据帧所示。

EDIT PATCH_CODE并不总是2个字母,偶尔情况下只有一个字母,在这种情况下,我需要将1强制插入结果代码列。

初始数据帧: head(data,4)

PATCH_CODE    TERR        PC1  
    A1       MENS_10  0.8629186  
    A3       MENS_10 -0.2703238 
    B1       MENS_10  0.9516067  
    B2       MENS_10 -0.1722446

结果数据框:

PATCH        CODE    TERR        PC1  
   A            1     MENS_10     0.8629186  
   A            3     MENS_10    -0.2703238 
   B            1     MENS_10     0.9516067  
   B            2     MENS_10    -0.1722446

当要拆分的列具有可识别的文本定界符(例如,逗号)(通过在reshape使用colsplit进行colsplit时,我已经看到了如何完成此操作的示例,但是我没有找到针对像我的结构的解决方案。 这可能吗?

str(data)的输出

'data.frame':   240 obs. of  3 variables:
 $ PATCH_CODE: Factor w/ 42 levels "A","A1","A2",..: 2 3 4 7 8 12 13 16 17 18 ...
 $ TERR      : Factor w/ 19 levels "MENS_10","MENS_14",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ PC1       : num  0.548 1.228 0.273 5.548 3.853 ...

您可以使用strsplit 传递空字符串作为分隔符会导致每个字母分开。

a <- c("A1", "B1", "C2", "D5", "R3")
strsplit(a, "")


[[1]]
[1] "A" "1"

[[2]]
[1] "B" "1"

[[3]]
[1] "C" "2"

[[4]]
[1] "D" "5"

[[5]]
[1] "R" "3"

如果您想将其放在矩阵中

> do.call(rbind, strsplit(a, ""))
     [,1] [,2]
[1,] "A"  "1" 
[2,] "B"  "1" 
[3,] "C"  "2" 
[4,] "D"  "5" 
[5,] "R"  "3" 

根据您的描述, strsplit应该可以正常工作。 如果您的数据稍微复杂一点,您还可以查看可能的基于regex的解决方案。

对于此特定示例,请尝试:

do.call(rbind, strsplit(mydf$PATCH_CODE, 
                        split = "(?<=[a-zA-Z])(?=[0-9])", 
                        perl = TRUE))
#     [,1] [,2]
# [1,] "A"  "1" 
# [2,] "A"  "3" 
# [3,] "B"  "1" 
# [4,] "B"  "2"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM