Создайте group_indices на основе нескольких столбцов
Я хотел бы генерировать индексы для группировки наблюдений на основе двух столбцов. Но я хочу, чтобы группы были сделаны наблюдениями, которые разделяют, по крайней мере одно наблюдение в общине. Я вижу, как создавать группы, основанные на наблюдениях, которые разделяют общее наблюдение, но не только одно из них.
Например, с фреймом данных:
dt <- data.frame(id=1:10,
G1 = c("A","A","B","B","C","C","C","D","E","F"),
G2 = c("Z","X","X","Y","W","V","U","s","T","T"))
Я хотел бы получить столбец
1,1,1,1,2,2,2,3,4,4
Я попытался использовать group_indices из dplyr, но не смог его выполнить.
Ответы
Ответ 1
Используя igraph, получите членство, затем нарисуйте имена:
library(igraph)
# convert to graph, and get clusters membership ids
g <- graph_from_data_frame(df1[, c(2, 3, 1)])
myGroups <- components(g)$membership
myGroups
# A B C D E F Z X Y W V U s T
# 1 1 2 3 4 4 1 1 1 2 2 2 3 4
# then map on names
df1$group <- myGroups[df1$G1]
df1
# id G1 G2 group
# 1 1 A Z 1
# 2 2 A X 1
# 3 3 B X 1
# 4 4 B Y 1
# 5 5 C W 2
# 6 6 C V 2
# 7 7 C U 2
# 8 8 D s 3
# 9 9 E T 4
# 10 10 F T 4
Ответ 2
Спасибо за коды к индексам 2 колонки. Не могли бы вы поделиться кодом для нескольких столбцов.