按位置拆分 data.table 列中的文本字符串
Split text string in a data.table columns by location
我正在尝试弄清楚如何使用 tstrisplit()
函数从 data.table
到 split
位置编号 的文本。我知道 Q1, & Q3 但这些没有解决我的问题。
举个例子:
DT2 <- data.table(a = paste0(LETTERS[1:5],seq(10,15)), b = runif(6))
DT2
a b
1: A10 0.4153622
2: B11 0.1567381
3: C12 0.5361883
4: D13 0.5920144
5: E14 0.3376648
6: A15 0.5503773
I tried the following which did not work:
DT2[, c("L", "D") := tstrsplit(a, "")][]
DT2[, c("L", "D") := tstrsplit(a, "[A-Z]")][]
DT2[, c("L", "D") := tstrsplit(a, "[0-9]{1}")][]
期望:
a b L D
1: A10 0.4153622 A 10
2: B11 0.1567381 B 11
3: C12 0.5361883 C 12
4: D13 0.5920144 D 13
5: E14 0.3376648 E 14
6: A15 0.5503773 A 15
非常感谢任何解释方面的帮助。
如果你想在字母和数字之间拆分,你可以在正则表达式 "(?<=[A-Za-z])(?=[0-9])"
上拆分,(?<=[A-Za-z])(?=[0-9] ) 将拆分限制为前面是字母后面是数字的位置:
正则表达式包含两部分,look behind (?<=[A-Za-z])
表示在一个字母之后,look ahead (?=[0-9])
,即在一个数字之前,参见 regex look around,在 r 中,您需要指定 perl=TRUE
以使用 Perl 兼容的正则表达式来使这些工作:
DT2[, c("L", "D") := tstrsplit(a, "(?<=[A-Za-z])(?=[0-9])", perl=TRUE)][]
# a b L D
#1: A10 0.01487372 A 10
#2: B11 0.95035709 B 11
#3: C12 0.49230300 C 12
#4: D13 0.67183871 D 13
#5: E14 0.40076579 E 14
#6: A15 0.27871477 A 15
我正在尝试弄清楚如何使用 tstrisplit()
函数从 data.table
到 split
位置编号 的文本。我知道 Q1,
举个例子:
DT2 <- data.table(a = paste0(LETTERS[1:5],seq(10,15)), b = runif(6))
DT2
a b
1: A10 0.4153622
2: B11 0.1567381
3: C12 0.5361883
4: D13 0.5920144
5: E14 0.3376648
6: A15 0.5503773
I tried the following which did not work:
DT2[, c("L", "D") := tstrsplit(a, "")][]
DT2[, c("L", "D") := tstrsplit(a, "[A-Z]")][]
DT2[, c("L", "D") := tstrsplit(a, "[0-9]{1}")][]
期望:
a b L D
1: A10 0.4153622 A 10
2: B11 0.1567381 B 11
3: C12 0.5361883 C 12
4: D13 0.5920144 D 13
5: E14 0.3376648 E 14
6: A15 0.5503773 A 15
非常感谢任何解释方面的帮助。
如果你想在字母和数字之间拆分,你可以在正则表达式 "(?<=[A-Za-z])(?=[0-9])"
上拆分,(?<=[A-Za-z])(?=[0-9] ) 将拆分限制为前面是字母后面是数字的位置:
正则表达式包含两部分,look behind (?<=[A-Za-z])
表示在一个字母之后,look ahead (?=[0-9])
,即在一个数字之前,参见 regex look around,在 r 中,您需要指定 perl=TRUE
以使用 Perl 兼容的正则表达式来使这些工作:
DT2[, c("L", "D") := tstrsplit(a, "(?<=[A-Za-z])(?=[0-9])", perl=TRUE)][]
# a b L D
#1: A10 0.01487372 A 10
#2: B11 0.95035709 B 11
#3: C12 0.49230300 C 12
#4: D13 0.67183871 D 13
#5: E14 0.40076579 E 14
#6: A15 0.27871477 A 15