Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-通过多个因素创建ID_R_Dataframe_Labels_Factors - Fatal编程技术网

R-通过多个因素创建ID

R-通过多个因素创建ID,r,dataframe,labels,factors,R,Dataframe,Labels,Factors,如何创建一个新的ID标签,总结存储在两个因素中的信息。我想嵌套一个因子!?在另一个里面 举一个小例子:假设我调查了许多树,现在我想给每个检查的分支添加一个标签,该标签给出树的编号和树上分支的编号。如果所有分支都只有一个正在进行的ID,那么这将是不必要的,也会造成混乱 示例代码: 请不要问我,为什么分支有这么奇怪的数字,这只是一个例子 当然,我可以使用interactionmydata$treat,mydata$标签,就像建议的那样。另外,对于一个唯一的ID,我可以使用类似的东西。但两者都会给我一

如何创建一个新的ID标签,总结存储在两个因素中的信息。我想嵌套一个因子!?在另一个里面

举一个小例子:假设我调查了许多树,现在我想给每个检查的分支添加一个标签,该标签给出树的编号和树上分支的编号。如果所有分支都只有一个正在进行的ID,那么这将是不必要的,也会造成混乱

示例代码: 请不要问我,为什么分支有这么奇怪的数字,这只是一个例子

当然,我可以使用interactionmydata$treat,mydata$标签,就像建议的那样。另外,对于一个唯一的ID,我可以使用类似的东西。但两者都会给我一个不区分树木的持续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包一无所知,也不知道它是如何详细工作的。当我将解决方案应用于我的TIBLE时,它将不起作用,它会再次给我一个持续的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 = "."))

librarydata.table setDTmydata mydata[,ID:=.GRP,by=ctree,branch]不错,现在我明白了为什么我的实际data.frame有问题了。分支列的类型为“因子”而不是“字符”。改变了这一点,现在对我来说效果很好。非常感谢。
library(tidyverse)

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