【问题标题】:R - Create ID by multiple factorsR - 通过多个因素创建 ID
【发布时间】:2018-03-20 16:06:12
【问题描述】:

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

作为一个小例子:假设我调查了许多树,现在我想为每个检查的分支添加一个标签,该标签为我提供树的编号和该树上的分支的编号 .如果所有分支都只有一个持续的 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 之类的东西。但是两者都会给我一个不区分树木的持续 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 在 cmets 中的解决方案 适用于示例数据实际上给了我一个持续的 ID,而不是区分树。另外,我对data.table 包一无所知,我无法理解它的详细工作原理。当我将解决方案应用于我的tibble 时,它不起作用(它再次给了我一个持续的 ID,忽略了一个因素)。因此,我真的很想看到dplyr 解决方案或类似的解决方案。

【问题讨论】:

  • library(data.table) setDT(mydata) mydata[, ID := .GRP, by = c("tree", "branch")]

标签: r dataframe labels factors


【解决方案1】:

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

library(tidyverse)

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

【讨论】:

  • 很好,现在我明白为什么我的实际data.frame 有问题了。 branch 列的类型为 factor 而不是 character。改变这一点,它现在对我来说效果很好。谢谢!
猜你喜欢
  • 2019-01-30
  • 1970-01-01
  • 2022-01-19
  • 2011-07-17
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多