R - 通过多种因素创建 ID

R - Create ID by multiple factors

如何创建一个新的 ID 标签来总结存储在两个因素中的信息。我希望一个因素 嵌套 (!?) 在另一个因素中。

举个小例子:假设我调查了很多树,现在我想为每个检查过的树枝添加一个标签,告诉我树的编号和树枝的编号 =40=]树。如果所有分支机构都只有一个正在进行的 ID,那将是不必要和混乱的。

示例代码:

mydata = data.frame(tree   = rep(letters[1:3], each = 20),
                    branch = rep(round(runif(12)*1000, 0), each = 5),
                    values = runif(60))

(请不要问我,为什么分行会有这么奇怪的数字,这只是一个例子!)

当然,我可以像this answer suggests. Also, for a unique ID I could use something like 一样使用interaction(mydata$treat, mydata$labels)。但两者都会给我一个不区分树木的持续 ID!我也可以使用一个又长又复杂的 for 循环,但我想要一个简单的答案(因为我希望有一个...)。

预期输出:

最后应该看起来像新的 ID 列。

mydata = data.frame(tree   = rep(letters[1:3],each = 20),
                    branch = rep(round(runif(12)*1000, 0), each = 5),
                    values = runif(60),
                    ID     = rep(rep(1:4, each = 5)));mydata

mydata$ID = interaction(mydata$tree, mydata$ID)

编辑:

所以@suchait 评论中的解决方案对示例数据很有效 实际上给了我一个不区分树的持续 ID。另外,我不了解 data.table 包,我无法了解它的详细工作原理。当我将解决方案应用于我的 tibble 时,它不会起作用(它再次为我提供了一个忽略一个因素的持续 ID)。因此,我真的很想看到 dplyr 解决方案或类似的东西。

dplyr 解决方案使用 group_by 将每棵树的分支分别分组,然后将分支 ID 转换为因子并将因子编号用作分支 ID

library(tidyverse)

tmp <- mydata %>% 
  group_by(tree) %>% 
  mutate(ID = str_c(tree, as.numeric(as.factor(branch)), sep = "."))