是否可以使用R中的字典对象将一个字符串映射到另一个字符串?

时间:2016-09-25 17:39:39

标签: r dictionary

我想在R中使用类似字典的对象将一个字符串映射到另一个字符串,如Python所示。例如,在Python中,您可以定义一个字典以将一个字符串转换为另一个字符串,例如:

d = {"s": "Superlative", "d": "Dynamic", "f": "Furious"}
pd.apply(lambda x: d[x["map_column"]], axis=1)

然而,在R中,如果你想根据这样的映射将一列中的一组字符串转换为另一列,你最终会定义一个需要大量if else的函数,如:

mapper <- function(x) {
    if (x = "s") {
        return ("Superlative")
    } else if (x = "d") {
            return ("Dynamic")
    }...

    return("")
}

但我不喜欢定义这么长的长期功能。那么有可能定义一个字典,或者更具体地说,是用R中的少得多的一行(或两行)代码得到结果吗?

3 个答案:

答案 0 :(得分:1)

您可以将环境用作哈希表:

dict <- new.env(hash = TRUE, parent = emptyenv(), size = NA)
## insert into hash table
dict[["s"]] <- "Superlative"
dict[["d"]] <- "Dynamic"
dict[["f"]] <- "Furious"
## query using key
key <- "s"
dict[[key]]
##[1] "Superlative"
key2 <- "f"
dict[[key2]]
##[1] "Furious"

答案 1 :(得分:1)

如果您已经在使用tidyverse,那么这就是recodedplyr的用途。

df %>%
    mutate(LongName = recode(ShortName, 
                             s = "Superlative",
                             d = "Dynamic",
                             f = "Furious",
                             `multiple words` = "Use backticks to escape"
                             )
           ) ->
    df

答案 2 :(得分:0)

我发现通过定义带有附加字符串的向量很容易实现,例如:

map <- c("s"="Superlative", "d"="Dynamic", "f"="Furious")
df$longCharacter <- map(df$shortCharacter)

这与Python中的字典一样,在单行代码中执行。