Как создать столбец / индекс на основе любого из двух выполняемых условий (чтобы включить кластеризацию совпадающих пар в одном и том же кадре данных)? - PullRequest
3 голосов
/ 24 июня 2019

У меня большой набор данных совпадающих пар (id1 и id2), и я хотел бы создать индексную переменную, чтобы я мог объединить эти пары в строки.

Таким образом, первая строка будет индексом 1 и с тех пор индекс будет увеличиваться на 1, если только id1 или id2 не совпадут ни с одним из значений в предыдущих строках. В этом случае следует применять ранее присвоенный индекс.

Я искал недели, и большинство решений, похоже, не соответствует тому, что мне нужно.

Вот некоторые данные, чтобы повторить то, что у меня есть:

id1 <- c(1,2,2,4,6,7,9,11)
id2 <- c(2,3,4,5,7,8,10,2)
df <- cbind(id1,id2)
df <- as.data.frame(df)

df
  id1 id2
1   1   2
2   2   3
3   2   4
4   4   5
5   6   7
6   7   8
7   9  10
8  11   2

И вот чего надеемся достичь:

#wanted result
index <- c(1,1,1,1,2,2,3,1)
df_indexed <- cbind(df,index)

df_indexed
  id1 id2 index
1   1   2     1
2   2   3     1
3   2   4     1
4   4   5     1
5   6   7     2
6   7   8     2
7   9  10     3
8  11   2     1

1 Ответ

2 голосов
/ 24 июня 2019

Это может быть проще сделать в igraph

library(igraph)
g <- graph.data.frame(df)
df$index <- clusters(g)$membership[as.character(df$id1)]
df$index
#[1] 1 1 1 1 2 2 3 1
...