[英]R - Create ID by multiple factors
如何創建一個新的ID標簽,以匯總存儲在兩個因素中的信息。 我想將一個因素嵌套(!?)放在另一個因素中。
作為一個小例子:比方說,我調查了很多樹木,現在我想給一個標簽添加到每個檢查的分支,讓我的樹的數量和上樹分支的數量。 如果所有分支都只有一個持續的ID,那將是不必要和令人困惑的。
mydata = data.frame(tree = rep(letters[1:3], each = 20),
branch = rep(round(runif(12)*1000, 0), each = 5),
values = runif(60))
(請不要問我,為什么分支有這么奇怪的數字,這只是一個例子!)
當然,我可以只使用interaction(mydata$treat, mydata$labels)
如答案所示。 另外,對於唯一ID,我可以使用this 。 但是兩者都會給我一個持續的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
包一無所知,無法詳細了解它的工作原理。 當我將解決方案應用於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 = "."))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.