是否可以使用R中类似字典的对象将一个字符串映射到另一个字符串?
我想使用Python中类似字典的对象将R中的一个字符串映射到另一个字符串。例如,在Python中,可以定义一个字典来将一个字符串转换为另一个字符串,如:是否可以使用R中类似字典的对象将一个字符串映射到另一个字符串?,r,dictionary,R,Dictionary,我想使用Python中类似字典的对象将R中的一个字符串映射到另一个字符串。例如,在Python中,可以定义一个字典来将一个字符串转换为另一个字符串,如: d = {"s": "Superlative", "d": "Dynamic", "f": "Furious"} pd.apply(lambda x: d[x["map_column"]], axis=1) 但是,在R中,如果您希望基于这种映射将一列中的一组字符串转换为另一列,那么您将最终定义一个函数,该函数需要花费大量的,如果else,例如
d = {"s": "Superlative", "d": "Dynamic", "f": "Furious"}
pd.apply(lambda x: d[x["map_column"]], axis=1)
但是,在R中,如果您希望基于这种映射将一列中的一组字符串转换为另一列,那么您将最终定义一个函数,该函数需要花费大量的,如果else
,例如:
mapper <- function(x) {
if (x = "s") {
return ("Superlative")
} else if (x = "d") {
return ("Dynamic")
}...
return("")
}
mapper您可以将环境用作哈希表:
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"
dict如果您已经在使用,那么这就是dplyr
中的recode
功能
df %>%
mutate(LongName = recode(ShortName,
s = "Superlative",
d = "Dynamic",
f = "Furious",
`multiple words` = "Use backticks to escape"
)
) ->
df
我发现通过定义一个带有附加字符串的向量很容易做到这一点,如:
map <- c("s"="Superlative", "d"="Dynamic", "f"="Furious")
df$longCharacter <- map(df$shortCharacter)
map如果有data.frame,则使用连接操作,例如合并。如果有向量,请使用命名向量。不太清楚您需要什么。标记一个因子如何?例如:txt或switch(x,s=“superative”,d=“Dynamic”,f=“frequer”,stop(x,'notfound'))
@Roland我想合并两个数据帧,但因为一个数据帧中的列使用快捷字符,而第二个数据帧使用完整的单词,在合并之前,我首先必须将快捷方式字符转换为完整字符。这对我不起作用。我得到错误:找不到函数“map”。应该是这样的:df