【发布时间】: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