如何通过"not"select提取字符串的子串?
How to extract the substring of a string by "not" select?
我有一个奇怪的日期列写成
1012003 表示 2003 年 1 月 1 日,
8132003 代表 2003 年 8 月 13 日
2003 年 6 月 8 日的 6082003
12172003 为 12/17/2003
使用
stri_sub(df$date,-4)
我得到年份或最后 4 位数字
正在使用
stri_sub(df$date,-6,-5)
我知道日期了。我如何获得月份?
我想做一些事情,根据选择最右边的 6 个来选择剩下的内容。
我认为这样的方法可能有效
stri_sub(!df$date,-6)
我想留下 1、8、6 和 12。
这里有一个方法:
> x <- c('1012003', '8132003', '6082003', '12172003')
> substr(x, 1, nchar(x) - 6)
[1] "1" "8" "6" "12"
您可以添加一个前导零,转换为实际日期,然后用它们做任何您想做的事...
v <- c(1012003, 8132003, 6082003 , 12172003)
# Add leading zero if needed
new.v <- sprintf("%08d", v)
#[1] "01012003" "08132003" "06082003" "12172003"
# Convert to date
v.dates <- as.Date(new.v, format = "%m%d%Y")
#[1] "2003-01-01" "2003-08-13" "2003-06-08" "2003-12-17"
# extract month-numbers
lubridate::month(v.dates)
#[1] 1 8 6 12
我们可以扩展 substr()
一点。
substr2 <- Vectorize(function(x, start, stop) {
stopifnot(sign(start) + sign(stop) != 0)
rv <- function(i) Reduce(paste0, rev(el(strsplit(i, ''))))
if (start < 0) {
rv(substr(rv(x), -start, -stop))
} else {
substr(x, start, stop)
}
}, USE.NAMES=FALSE)
用法
substr2(z, -1, -4) ## years
# [1] "2003" "2003" "2003" "2003"
substr2(z, -5, -6) ## days
# [1] "01" "13" "08" "17"
substr2(z, -7, -8) ## months
# [1] "1" "8" "6" "12"
数据:
z <- c('1012003', '8132003', '6082003', '12172003')
我有一个奇怪的日期列写成
1012003 表示 2003 年 1 月 1 日, 8132003 代表 2003 年 8 月 13 日 2003 年 6 月 8 日的 6082003 12172003 为 12/17/2003 使用
stri_sub(df$date,-4)
我得到年份或最后 4 位数字
正在使用
stri_sub(df$date,-6,-5)
我知道日期了。我如何获得月份?
我想做一些事情,根据选择最右边的 6 个来选择剩下的内容。
我认为这样的方法可能有效
stri_sub(!df$date,-6)
我想留下 1、8、6 和 12。
这里有一个方法:
> x <- c('1012003', '8132003', '6082003', '12172003')
> substr(x, 1, nchar(x) - 6)
[1] "1" "8" "6" "12"
您可以添加一个前导零,转换为实际日期,然后用它们做任何您想做的事...
v <- c(1012003, 8132003, 6082003 , 12172003)
# Add leading zero if needed
new.v <- sprintf("%08d", v)
#[1] "01012003" "08132003" "06082003" "12172003"
# Convert to date
v.dates <- as.Date(new.v, format = "%m%d%Y")
#[1] "2003-01-01" "2003-08-13" "2003-06-08" "2003-12-17"
# extract month-numbers
lubridate::month(v.dates)
#[1] 1 8 6 12
我们可以扩展 substr()
一点。
substr2 <- Vectorize(function(x, start, stop) {
stopifnot(sign(start) + sign(stop) != 0)
rv <- function(i) Reduce(paste0, rev(el(strsplit(i, ''))))
if (start < 0) {
rv(substr(rv(x), -start, -stop))
} else {
substr(x, start, stop)
}
}, USE.NAMES=FALSE)
用法
substr2(z, -1, -4) ## years
# [1] "2003" "2003" "2003" "2003"
substr2(z, -5, -6) ## days
# [1] "01" "13" "08" "17"
substr2(z, -7, -8) ## months
# [1] "1" "8" "6" "12"
数据:
z <- c('1012003', '8132003', '6082003', '12172003')