我有一个数字变量,DATE
它表示最后两个字符为MONTH
,第一个或两个字符为的日期DAY
。我想将该列拆分为MONTH
和的单独列DAY
。
我可以使用以下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"
您也可以尝试的组合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"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句