加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 在最后一个字符旁边分割字符串

发布时间:2020-12-14 06:04:56 所属栏目:百科 来源:网络整理
导读:我有一个数字变量DATE,表示最后两个字符为MONTH且前一个或两个字符为DAY的日期.我想将列拆分为MONTH和DAY的单独列. 我可以使用以下R代码执行此操作.虽然我希望有一个更简单的正则表达式解决方案. my.data - read.table(text = ' ID DATE VARX A111 104 0 A11
我有一个数字变量DATE,表示最后两个字符为MONTH且前一个或两个字符为DAY的日期.我想将列拆分为MONTH和DAY的单独列.

我可以使用以下R代码执行此操作.虽然我希望有一个更简单的正则表达式解决方案.

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)),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,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"

您还可以尝试sprintf和substr的组合.

在这里,我将这些包装成一个函数,给出你的答案:

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"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读