用单独的 df 重命名 phylo tip 标签
Rename phylo tip labels with separate df
我希望使用第二个 df 重命名我的进化树中的 1290 个尖端标签。我可以使用以下代码一次重命名一个标签:
phylo$tip.label[phylo$tip.label=="e54924083c02bd088c69537d02406eb8"] <- "something"
但这显然效率低下。如何使用包含原始提示标签和新标签的第二个 df 重命名所有标签?需要的话我可以提供示例数据(文件很大)
谢谢!
您可以使用值匹配函数%in%
首先检测哪些标签在数据框中的“旧标签”列中,然后用“新标签”替换它们。
## A random tree
my_tree <- rtree(20)
## A data.frame of names to replace
my_data_frame <- data.frame(old.labels = c("t1", "t3", "t9"),
new.labels = c("tip_1", "tip_3", "tip_9"))
## Find the old labels in the tree
my_tree$tip.label[my_tree$tip.label %in% my_data_frame$old.labels] <- my_data_frame$new.labels
my_tree$tip.label %in% my_data_frame$old.labels
returns 每个提示的逻辑向量 (TRUE
/FALSE
) 匹配 my_data_frame$old.labels
然后你可以很容易地用一些东西替换您选择的相同长度(即 length(which(my_tree$tip.label %in% my_data_frame$old.labels)) == length(my_data_frame$new.labels)
)。
让我们举一个例子树:
oldTree <- ape::read.tree(text = "(t6, (t5, (t4, (t3, (t2, t1)))));")
old <- c("t1", "t3", "t6")
new <- c("tip_1", "tip_3", "tip_6")
plot(oldTree)
一个稳健的方法是:
tree <- oldTree
tree$tip.label[match(old, tree$tip.label)] <- new
plot(tree)
Thomas 的代码只有在 tree$tip.label
和 old.labels
中的标签顺序相同时才有效。
tree <- oldTree
my_data_frame <- data.frame(old.labels = old,
new.labels = new)
## Find the old labels in the tree
tree$tip.label[tree$tip.label %in% my_data_frame$old.labels] <- my_data_frame$new.labels
plot(tree)
在这里,提示的标签有误:
我希望使用第二个 df 重命名我的进化树中的 1290 个尖端标签。我可以使用以下代码一次重命名一个标签:
phylo$tip.label[phylo$tip.label=="e54924083c02bd088c69537d02406eb8"] <- "something"
但这显然效率低下。如何使用包含原始提示标签和新标签的第二个 df 重命名所有标签?需要的话我可以提供示例数据(文件很大)
谢谢!
您可以使用值匹配函数%in%
首先检测哪些标签在数据框中的“旧标签”列中,然后用“新标签”替换它们。
## A random tree
my_tree <- rtree(20)
## A data.frame of names to replace
my_data_frame <- data.frame(old.labels = c("t1", "t3", "t9"),
new.labels = c("tip_1", "tip_3", "tip_9"))
## Find the old labels in the tree
my_tree$tip.label[my_tree$tip.label %in% my_data_frame$old.labels] <- my_data_frame$new.labels
my_tree$tip.label %in% my_data_frame$old.labels
returns 每个提示的逻辑向量 (TRUE
/FALSE
) 匹配 my_data_frame$old.labels
然后你可以很容易地用一些东西替换您选择的相同长度(即 length(which(my_tree$tip.label %in% my_data_frame$old.labels)) == length(my_data_frame$new.labels)
)。
让我们举一个例子树:
oldTree <- ape::read.tree(text = "(t6, (t5, (t4, (t3, (t2, t1)))));")
old <- c("t1", "t3", "t6")
new <- c("tip_1", "tip_3", "tip_6")
plot(oldTree)
一个稳健的方法是:
tree <- oldTree
tree$tip.label[match(old, tree$tip.label)] <- new
plot(tree)
Thomas 的代码只有在 tree$tip.label
和 old.labels
中的标签顺序相同时才有效。
tree <- oldTree
my_data_frame <- data.frame(old.labels = old,
new.labels = new)
## Find the old labels in the tree
tree$tip.label[tree$tip.label %in% my_data_frame$old.labels] <- my_data_frame$new.labels
plot(tree)
在这里,提示的标签有误: