R - 通过多个因素创建ID

时间:2018-03-20 16:06:12

标签: r dataframe labels factors

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

作为一个小例子:让我说我调查了很多树,现在我想为每个检查过的分支添加一个标签,它给出了树的编号和上的分支编号< / em>树。如果所有分支机构只有持续的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那样使用interaction(mydata$treat, mydata$labels)建议。另外,对于唯一ID,我可以使用类似this的内容。但是两者都会给我一个持续的身份证,这不会区分树木!我也可以使用一个冗长而复杂的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解决方案或类似的东西。

1 个答案:

答案 0 :(得分:1)

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

library(tidyverse)

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