在 R 中:使用循环让一列等于依赖于 R 中另一列中的名称列表的名称列表

in R: Using loop to let one column equal a list of names dependent on a list of names in another column in R

我是循环的新手 - 实际上,我不理解它们,并且通常会尝试找到更简单的替代方法。这里我有一个简单的数据集:

spp = c("A", "B", "C", "A", "D","D")
Genus = as.vector(rep(1,6))
df = data.frame(cbind(spp,Genus), stringsAsFactors=FALSE)

我想根据 "spp" 列的内容,用特定的属名替换 "Genus" 列中的任何内容。这就是我所做的:

df$Genus[(df$spp == "A")] = "Apple"
df$Genus[(df$spp == "B")] = "Bla"
df$Genus[(df$spp == "C")] = "Cat"
df$Genus[(df$spp == "D")] = "Donkey"

虽然它 returns 需要的结果,但我正在寻找一种可以循环此函数而无需重复自己的方法?我的尝试包括尝试在各种 ifforapply 函数中使用 levels(df$spp),但都失败了,并返回了我不明白的错误。我看过的所有循环的基本示例都只使用非常简单的函数,但我不知道如何将循环应用于具有两部分的稍微复杂的函数,如上所述?任何建议将不胜感激!

弗朗索瓦

您可以尝试使用 lapplyswitch() 语句。

df$Genus <- lapply(df$spp, switch, "A"="Apple", "B"="Bla", "C"="Cat", "D"="Donkey")

df
# spp  Genus
#   A  Apple
#   B    Bla
#   C    Cat
#   A  Apple
#   D Donkey
#   D Donkey

lapply 将以递归方式运行,评估 spp 的值,并将该值与表达式中的关联值切换出来,并将其分配给 Genus 列。