根据字母创建数字向量

时间:2019-10-30 13:10:30

标签: r

所以,这是一个问题:

“创建给定一个单词的函数,返回位置 字母向量上的单词字母集合例如,如果单词 是‘abba’,该函数将返回1 2 2 1。”

到目前为止,我是这样的:

l <- function(word) {
    chr <- c()
    y <- c()
    strsplit(chr,word)
    i<-1
    while(i<length) {
           o<-letters[i]
           x<-chr[i]
           if(o==x) {
                    y[i]<-i
           }
           i+1
    }
    y
}

我尝试运行l(“ hello”),它返回NULL。我很失落,不胜感激!谢谢!

3 个答案:

答案 0 :(得分:6)

使用base R

lapply(strsplit(x, "", fixed = TRUE), match, letters)

[[1]]
[1] 1 2 2 1

答案 1 :(得分:1)

我在base中提供了另一个有趣的功能:

x <- "abcxyz"
strtoi(strsplit(x, "")[[1]], 36) - 9
# [1]  1  2  3 24 25 26

strtoi() base-n 数字系统转换为 base-10 (即十进制)数字系统。以 base-16 (即十六进制)为例,由于十六进制的12是十进制的18,因此strtoi("12", base = 16)将得到18。如果基数是36,则strtoi()会将(1〜9,a〜z)映射到 1〜35 ,即 a〜z base-36 系统中的“ strong”是小数 10〜35 。我的代码中的-9会将10〜35转换为1〜26,这是OP的要求。另一个常见的用途是将 binary 数转换为十进制。例如。 strtoi("01001", base = 2)获得9。

答案 2 :(得分:0)

library(purrr)
my_fun <- function(x) {
  x %>% 
    strsplit("") %>% 
    map(factor, levels = letters) %>% 
    map(as.numeric)
}


x <- c("abba", "hello")
my_fun(x)
#> [[1]]
#> [1] 1 2 2 1
#> 
#> [[2]]
#> [1]  8  5 12 12 15

在这里,我们使用因子为内在的整数。

str是一个字符向量,例如str <- c('a', 'b', 'b', 'a')。当我们运行factor(str, levels = letters)时,我们将其转换为具有26个级别的因数:“ a”,“ b”,“ c”,依此类推。如果我们对其应用as.integer,则a将变为1,因为它是第一级,'b'-2,依此类推。