正如标题所示,我正在寻找一种优雅的方法来测试字符是否在字母表的前n个位置。
因此,对于字符向量,如下所示:
names <- c("Brian", "Cormac", "Zachariah")
并使用n <- 6
它会返回:
TRUE','TRUE', 'FALSE'
*我知道我可以使用substr(names,1,1) %in% c("A", "B", "C", "D", "E", "F")
,但是我希望有一个更好的解决方案。
编辑:我在字母表中的位置是指第一个字母是否按字母顺序位于前n个字母中。因此,“ A”在前n = 1+中,“ B”在前n = 2 +中,“ Y”在前n = 25个字母中,依此类推。
答案 0 :(得分:0)
PoGibas的评论似乎很优雅。下一步将其包装在一个函数中:
cht6_pog <- function(string) {
x <- toupper(substring(string, 1, 1)) %in% LETTERS[1:6]
names(x) <- string
x
}
cht6_pog(names)
Brian Cormac Zachariah
TRUE TRUE FALSE
答案 1 :(得分:0)
这是我对您问题的回答。
# fun:
check_char <- function(string, start_n, end_n, char_pattern)
{
str_list <- strsplit(substr(string, start_n, end_n), "")
out <- sapply(str_list, function(x) any(tolower(x) %in% tolower(char_pattern)))
return(out)
}
# args:
str_vec <- c("Google", "Facebook", "Amazon")
str_n <- 1
end_n <- 4
char <- LETTERS[1:6]
# run:
out <- check_char(str_vec, str_n, end_n, char)
print(out)
# [1] FALSE TRUE TRUE