Если я правильно понял, то, что вы хотите сделать, это
df <- expand.grid(unlist(lst1), unlist(lst1))
df
Var1 Var2
1 ROOM1-abc ROOM1-abc
2 ROOM1-def ROOM1-abc
3 ROOM2-abc ROOM1-abc
4 ROOM2-lol ROOM1-abc
5 ROOM3-whatever ROOM1-abc
6 ROOM1-abc ROOM1-def
7 ROOM1-def ROOM1-def
8 ROOM2-abc ROOM1-def
9 ROOM2-lol ROOM1-def
10 ROOM3-whatever ROOM1-def
11 ROOM1-abc ROOM2-abc
12 ROOM1-def ROOM2-abc
13 ROOM2-abc ROOM2-abc
14 ROOM2-lol ROOM2-abc
15 ROOM3-whatever ROOM2-abc
16 ROOM1-abc ROOM2-lol
17 ROOM1-def ROOM2-lol
18 ROOM2-abc ROOM2-lol
19 ROOM2-lol ROOM2-lol
20 ROOM3-whatever ROOM2-lol
21 ROOM1-abc ROOM3-whatever
22 ROOM1-def ROOM3-whatever
23 ROOM2-abc ROOM3-whatever
24 ROOM2-lol ROOM3-whatever
25 ROOM3-whatever ROOM3-whatever
Это дает матрицу с всеми возможными комбинациями.Таким образом, отличие от предложения akrun состоит в том, что это также дает вам комбинацию с самим элементом, например, ROOM1-abc |ROOM1-abc и заботится о порядке, следовательно, дает вам, например, ROOM3-что угодно |ROOM1-abc и ROOM3-что угодно |ROOM1-abc.
Если вам не нужен порядок, вы можете удалить строки с помощью duplicate
df[!duplicated(t(apply(df, 1, sort))), ]
Var1 Var2
1 ROOM1-abc ROOM1-abc
2 ROOM1-def ROOM1-abc
3 ROOM2-abc ROOM1-abc
4 ROOM2-lol ROOM1-abc
5 ROOM3-whatever ROOM1-abc
7 ROOM1-def ROOM1-def
8 ROOM2-abc ROOM1-def
9 ROOM2-lol ROOM1-def
10 ROOM3-whatever ROOM1-def
13 ROOM2-abc ROOM2-abc
14 ROOM2-lol ROOM2-abc
15 ROOM3-whatever ROOM2-abc
19 ROOM2-lol ROOM2-lol
20 ROOM3-whatever ROOM2-lol
25 ROOM3-whatever ROOM3-whatever
РЕДАКТИРОВАТЬ
# splits at "-"
split <- strsplit(unlist(lst1), "-")
# adds "-" to each vector
split2 <- lapply(split, function(x){
c(x[1], "-", x[2])})
# saves everything as a dataframe (if desired)
do.call("cbind.data.frame", split2)