正则表达式 – 在最后一个字符旁边分割字符串
发布时间: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" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |