在 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 需要的结果,但我正在寻找一种可以循环此函数而无需重复自己的方法?我的尝试包括尝试在各种 if
和 for
和 apply
函数中使用 levels(df$spp)
,但都失败了,并返回了我不明白的错误。我看过的所有循环的基本示例都只使用非常简单的函数,但我不知道如何将循环应用于具有两部分的稍微复杂的函数,如上所述?任何建议将不胜感激!
弗朗索瓦
您可以尝试使用 lapply
的 switch()
语句。
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
列。
我是循环的新手 - 实际上,我不理解它们,并且通常会尝试找到更简单的替代方法。这里我有一个简单的数据集:
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 需要的结果,但我正在寻找一种可以循环此函数而无需重复自己的方法?我的尝试包括尝试在各种 if
和 for
和 apply
函数中使用 levels(df$spp)
,但都失败了,并返回了我不明白的错误。我看过的所有循环的基本示例都只使用非常简单的函数,但我不知道如何将循环应用于具有两部分的稍微复杂的函数,如上所述?任何建议将不胜感激!
弗朗索瓦
您可以尝试使用 lapply
的 switch()
语句。
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
列。