gpt4 book ai didi

regex - 在最后一个字符旁边之前拆分字符串

转载 作者:行者123 更新时间:2023-12-04 22:31:03 28 4
gpt4 key购买 nike

我有一个数字变量 DATE ,它表示最后两个字符是 MONTH 并且前一个或两个字符是 DAY 的日期。我想将该列拆分为 MONTHDAY 的单独列。

我可以使用以下 R 代码来做到这一点。虽然我希望有一个更简单的 regex 解决方案。

my.data <- read.table(text = '
ID DATE VARX
A111 104 0
A111 204 1
A111 1004 4
A111 2004 4
B111 3004 2
C111 3004 3
C111 105 4
C111 1005 4
', header = TRUE, stringsAsFactors = FALSE)

# remove the last two characters of a string
my.data$DAY <- ifelse(nchar(my.data$DATE) == 3,
substr(my.data$DATE, nchar(my.data$DATE) - (nchar(my.data$DATE)-1), nchar(my.data$DATE) - (nchar(my.data$DATE)-1)),
substr(my.data$DATE, nchar(my.data$DATE) - (nchar(my.data$DATE)-1), nchar(my.data$DATE) - (nchar(my.data$DATE)-2)))

# keep the last two characters of a string

my.data$MONTH <- substr(my.data$DATE, (nchar(my.data$DATE)-1), nchar(my.data$DATE))

ID DATE VARX DAY MONTH
1 A111 104 0 1 04
2 A111 204 1 2 04
3 A111 1004 4 10 04
4 A111 2004 4 20 04
5 B111 3004 2 30 04
6 C111 3004 3 30 04
7 C111 105 4 1 05
8 C111 1005 4 10 05

谢谢你的任何建议。

最佳答案

要使用正则表达式,您可以尝试:

dat <- c(104, 204, 1004, 2004, 3004, 3004, 105, 1005)


day <- gsub("(.*?)(..)", "\\1", dat)
day

[1] "1" "2" "10" "20" "30" "30" "1" "10"

mth <- gsub("(.*?)(..)", "\\2", dat)
mth

[1] "04" "04" "04" "04" "04" "04" "05" "05"

您也可以尝试组合使用 sprintfsubstr

在这里,我将这些包装成一个函数,为您提供答案:
foo <- function(x){
dat <- sprintf("%04d", x)
cbind(day=substr(dat, 1, 2), month=substr(dat, 3, 4))
}

foo(dat)

foo(dat)
day month
[1,] "01" "04"
[2,] "02" "04"
[3,] "10" "04"
[4,] "20" "04"
[5,] "30" "04"
[6,] "30" "04"
[7,] "01" "05"
[8,] "10" "05"

关于regex - 在最后一个字符旁边之前拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25324471/

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