[英]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.