我想在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中的少得多的一行(或两行)代码得到结果吗?
答案 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
,那么这就是recode
中dplyr
的用途。
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中的字典一样,在单行代码中执行。