gpt4 book ai didi

r - 从 R 中的整数拆分字符串

转载 作者:行者123 更新时间:2023-12-03 23:55:23 26 4
gpt4 key购买 nike

我最近在尝试时遇到了一个有趣的问题
创建自定义数据库。

我的行是这样的:

 183746IGH
105928759UBS

等等(所以基本上是一个与字符串连接的整数,两者的大小都相对随机。)。我想要做的是以某种方式将第 1 列中的整数与第 2 列中的所有其他数字(字母)分开。如何做到这一点?我一直在尝试 strsplit 但它似乎没有提供这种功能。

感谢您的任何帮助。

最佳答案

其他选项包括 tstrsplit来自 data.table 的开发版

library(data.table)#v1.9.5+
setDT(df)[,tstrsplit(V1,'(?<=\\d)(?=\\D)', perl=TRUE, type.convert=TRUE)]
# V1 V2
#1: 131341 adad
#2: 45365 adadar
#3: 425 cavsbsb
#4: 46567567 daadvsv
如果有元素首先出现“非数字”部分,最后出现“数字”,那么,我们可以使用更通用的选项作为正则表达式模式,
 setDT(df)[,tstrsplit(V1, "(?<=\\d)(?=\\D)|(?<=\\D)(?=\\d)",
perl = TRUE)]
或使用 extract来自 tidyr
library(tidyr)
extract(df, V1, into=c('V1', 'V2'), '(\\d+)(\\D+)', convert=TRUE)
# V1 V2
#1 131341 adad
#2 45365 adadar
#3 425 cavsbsb
#4 46567567 daadvsv
如果您还需要原始列,
 extract(df, V1, into=c('V2', 'V3'), '(\\d+)(\\D+)',
convert=TRUE, remove=FALSE)
# V1 V2 V3
#1 131341adad 131341 adad
#2 45365adadar 45365 adadar
#3 425cavsbsb 425 cavsbsb
#4 46567567daadvsv 46567567 daadvsv
对于 data.table ,我们可以使用 :=创建新列,以便现有列保留在输出中,即
setDT(df)[,paste0('V',2:3):=tstrsplit(V1,'(?<=\\d)(?=\\D)',
perl=TRUE, type.convert=TRUE)]
# V1 V2 V3
#1: 131341adad 131341 adad
#2: 45365adadar 45365 adadar
#3: 425cavsbsb 425 cavsbsb
#4: 46567567daadvsv 46567567 daadvsv
注意:这两种解决方案都可以选择转换拆分列的类别 ( type.convert/convert )。
数据
df <- data.frame(V1 = c("131341adad", "45365adadar", "425cavsbsb", 
"46567567daadvsv"))

关于r - 从 R 中的整数拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29995980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com