在一个向量中查找元素,并用R

时间:2017-02-07 16:09:05

标签: r replace

我有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中执行此操作的方法

2 个答案:

答案 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]
}

可能语法不正确。