我有3列名字(对应不同的硅藻种类)。第一列是我的物种的当前名称,第二列是物种的“旧”(即不再使用)名称,第三列是物种的“新”(即分类后更新)名称。
对于第一列中的每个值,我需要在第二列中找到它,如果找到,我需要用更新的名称(存储在第三列中)替换它。例如,给定这个矩阵:
Column 1 Column 2 Column 3
Achnanthes.atomus Amphora.coffeaeformis Halamphora.coffeaeformis
Achnanthes.biasolettiana Achnanthes.atomus Achnanthidium.atomus
在第1栏(第一行)中找到的Achnanthes.atomus应在第2栏(第二行)中标识,并替换为“新名称”Achnanthidium.atomus(第2栏,第2行)。
我的矩阵称为Diatosdef。如果我这样做,它可以工作:
colnames(Diatosdef) <- gsub("Achnanthes.atomus","Achnanthidium.atomus",colnames(Diatosdef))
但我需要按物种分类,我有近100种
有人可以帮助我吗?
谢谢!
P.S:我发现我可以使用vlookup函数在Excel中执行此操作,但我仍然在寻找一种在R中执行此操作的方法
答案 0 :(得分:0)
fun <- function(x, mat){
if(x %in% mat[,2]) mat[which(mat[,2]==x), 3]
else x
}
Diatosdef[,1] <- sapply(Diatosdef[,1], fun, mat = Diatosdef)
答案 1 :(得分:-1)
你可以试试这个:
for(i in matrix[:1]){
if(matrix[i:1] == matrix[i:2])
matrix[i:1] = matrix[i:3]
}
可能语法不正确。