区分纯数字字符串和其他字符串
Distinguishing between numeric only strings and otherwise
我想做一个逻辑测试来区分除 ":"
之外仅由数字组成的字符串向量(如向量 B
)和除 ":"
之外的字符串向量不是仅由数字组成(如向量 A
)。
这个逻辑测试的名称可以是is_num_vec
(见下文)。这在 R 中可能吗?
A = c("prof2:wcf_type2", "prof2:wcf_type3", "1", "c.f_.")
B = c("2:2", "2:3", "1", "2")
is_num_vec <- function(vec){
# Your solution
}
#### EXPECTED OUTPUT:
is_num_vec(A)
> [1] FALSE
is_num_vec(B)
> [1] TRUE
这里有一个非常简单的解决方案,可能适合您的目的:
首先从vec
中删除:
,然后使用grepl()
测试vec
中的所有元素是否都是数字^[0-9]{1,}$
。使用all()
测试是否所有逻辑值都是TRUE
.
is_num_vec <- function(vec){
all(grepl("^[0-9]{1,}$", gsub(":", "", vec)))
}
is_num_vec(A)
[1] FALSE
is_num_vec(B)
[1] TRUE
is_num_vec("5a3")
[1] FALSE
这是使用 sum()
和 grepl()
的一种基本方法:
is_num_vec <- function(vec) {
return(sum(grepl("^\d+(?::\d+)*$", vec)) == length(vec))
}
is_num_vec(A) # [1] FALSE
is_num_vec(B) # [1] TRUE
数据:
A <- c("prof2:wcf_type2", "prof2:wcf_type3", "1", "c.f_.")
B <- c("2:2", "2:3", "1", "2")
我想做一个逻辑测试来区分除 ":"
之外仅由数字组成的字符串向量(如向量 B
)和除 ":"
之外的字符串向量不是仅由数字组成(如向量 A
)。
这个逻辑测试的名称可以是is_num_vec
(见下文)。这在 R 中可能吗?
A = c("prof2:wcf_type2", "prof2:wcf_type3", "1", "c.f_.")
B = c("2:2", "2:3", "1", "2")
is_num_vec <- function(vec){
# Your solution
}
#### EXPECTED OUTPUT:
is_num_vec(A)
> [1] FALSE
is_num_vec(B)
> [1] TRUE
这里有一个非常简单的解决方案,可能适合您的目的:
首先从vec
中删除:
,然后使用grepl()
测试vec
中的所有元素是否都是数字^[0-9]{1,}$
。使用all()
测试是否所有逻辑值都是TRUE
.
is_num_vec <- function(vec){
all(grepl("^[0-9]{1,}$", gsub(":", "", vec)))
}
is_num_vec(A)
[1] FALSE
is_num_vec(B)
[1] TRUE
is_num_vec("5a3")
[1] FALSE
这是使用 sum()
和 grepl()
的一种基本方法:
is_num_vec <- function(vec) {
return(sum(grepl("^\d+(?::\d+)*$", vec)) == length(vec))
}
is_num_vec(A) # [1] FALSE
is_num_vec(B) # [1] TRUE
数据:
A <- c("prof2:wcf_type2", "prof2:wcf_type3", "1", "c.f_.")
B <- c("2:2", "2:3", "1", "2")