计算 R 中的尾随零
Count trailing zeros in R
如何计算字符串向量中的尾随零。例如,如果我的字符串向量是:
x = c('0000','1200','1301','X230','9900')
答案应该是
> numZeros
[1] 4 2 0 1 2
我不想使用多个 ifelse
,因为我认为应该有一个更优雅、更快速的解决方案。我试过使用模数,像这样
y = as.integer(x)
numZeros = (!(y%%10000))+(!(y%%1000))+(!(y%%100))+(!(y%%10))
但这需要满足两个条件。
- 字符串的最大长度是固定的(在我的例子中是这样)并且
- 向量中的所有字符串都可以转换为整数,但在我的例子中并非如此。
然后使用 stringr
包并创建了一个解决方案,但它非常冗长。
library(stringr)
numZeros =
4*str_detect(x,"0000") +
3*str_detect(x,"[1-9 A-Z]000") +
2*str_detect(x,"[1-9 A-Z]{2}00") +
str_detect(x,"[1-9 A-Z]{3}0")
此外,我无法通过查看 str_detect
.
的定义来确定 str_detect
是否使用 ifelse
我发现了同样的问题 here 但 python。如果 R 已回答此问题,请提供 link.
我找到了一个简单的解决方案,基础是 R
:
x <- c('0000','1200','1301','X230','9900')
nchar(x) - nchar(sub("0*$", "", x))
# > nchar(x) - nchar(sub("0*$", "", x))
# [1] 4 2 0 1 2
我们可以使用str_extract
在字符串的末尾($
)提取一个或多个0,并使用nchar
来获取计数。如果需要,将 NA
元素分配给 0
library(stringr)
res <- nchar(str_extract(x, "0+$"))
res[is.na(res)] <- 0
res
#[1] 4 2 0 1 2
数据
x = c('0000','1200','1301','X230','9900')
您可以匹配所有尾随的 0
,然后计算它们。这是一个基本的 R 解决方案:
> matches <- regmatches(x, gregexpr("0(?=0*$)", x, perl=TRUE))
> sapply(matches, length)
[1] 4 2 0 1 2
此处,0(?=0*$)
匹配任何 0
,它仅在字符串末尾跟有零个或多个 (*
) 个零 ($
)。
参见 this regex demo and an R demo online。
如何计算字符串向量中的尾随零。例如,如果我的字符串向量是:
x = c('0000','1200','1301','X230','9900')
答案应该是
> numZeros
[1] 4 2 0 1 2
我不想使用多个 ifelse
,因为我认为应该有一个更优雅、更快速的解决方案。我试过使用模数,像这样
y = as.integer(x)
numZeros = (!(y%%10000))+(!(y%%1000))+(!(y%%100))+(!(y%%10))
但这需要满足两个条件。
- 字符串的最大长度是固定的(在我的例子中是这样)并且
- 向量中的所有字符串都可以转换为整数,但在我的例子中并非如此。
然后使用 stringr
包并创建了一个解决方案,但它非常冗长。
library(stringr)
numZeros =
4*str_detect(x,"0000") +
3*str_detect(x,"[1-9 A-Z]000") +
2*str_detect(x,"[1-9 A-Z]{2}00") +
str_detect(x,"[1-9 A-Z]{3}0")
此外,我无法通过查看 str_detect
.
str_detect
是否使用 ifelse
我发现了同样的问题 here 但 python。如果 R 已回答此问题,请提供 link.
我找到了一个简单的解决方案,基础是 R
:
x <- c('0000','1200','1301','X230','9900')
nchar(x) - nchar(sub("0*$", "", x))
# > nchar(x) - nchar(sub("0*$", "", x))
# [1] 4 2 0 1 2
我们可以使用str_extract
在字符串的末尾($
)提取一个或多个0,并使用nchar
来获取计数。如果需要,将 NA
元素分配给 0
library(stringr)
res <- nchar(str_extract(x, "0+$"))
res[is.na(res)] <- 0
res
#[1] 4 2 0 1 2
数据
x = c('0000','1200','1301','X230','9900')
您可以匹配所有尾随的 0
,然后计算它们。这是一个基本的 R 解决方案:
> matches <- regmatches(x, gregexpr("0(?=0*$)", x, perl=TRUE))
> sapply(matches, length)
[1] 4 2 0 1 2
此处,0(?=0*$)
匹配任何 0
,它仅在字符串末尾跟有零个或多个 (*
) 个零 ($
)。
参见 this regex demo and an R demo online。