Я пытаюсь получить уникальную комбинацию по каждому идентификатору, я получаю ошибку, он не расширяет идентификатор.
ID <- c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,5,5,5,5,5,6,6,6,6)
var1 <- c("A","B","E","F","C","D","C","A","B","C","A","D","B","C",
"A","B","C","A","D","C","A","B","C","E","F","G")
df1 <- data.frame(ID,var1)
df1 <- df1[order(df1$ID, df1$var1),]
dd <- unique(df1)
dd <- data.table(dd)
dd[,new4 := t(combn(sort(var1), m = 3))[,1],by= "ID"]
dd[,new5:= t(combn(sort(var1), m = 3))[,2],by="ID"]
dd[,new6:= t(combn(sort(var1), m = 3))[,3],by="ID"]
Warning message:
In `[.data.table`(dd, , `:=`(new4, t(combn(sort(var1), m = 3))[, :
RHS 1 is length 10 (greater than the size (5) of group 1). The last 5 element(s) will be discarded.
ID var1 new4 new5 new6
1: 1 A A B C
2: 1 B A B E
3: 1 C A B F
4: 1 E A C E
5: 1 F A C F
6: 2 A A B C
7: 2 B A B D
8: 2 C A C D
9: 2 D B C D
10: 3 A A B C
11: 3 B A B D
12: 3 C A C D
13: 3 D B C D
14: 4 A A B C
15: 4 B A B C
16: 4 C A B C
17: 5 A A B C
18: 5 B A B D
19: 5 C A C D
20: 5 D B C D
21: 6 C C E F
22: 6 E C E G
23: 6 F C F G
24: 6 G E F G
Вывод не дает достаточного количества комбинаций по каждому ID, ID1 (A,B,C,E,F), он дает только 5 комбинаций. В любом случае есть решение проблемы?Вывод, который я хочу для ID1, есть 10 комбинаций (A B C) (A C F) (A B F) (A B E) (BC E) (B C F) (C A B) (C A E) (C A F) (E C F)
combn
. - person akrun   schedule 23.09.2016dd[, transpose(combn(sort(as.character(var1)), 3, FUN = list)), by = ID]
, но если мы хотим, чтобы «var1» также отображался на выходе, я не уверен, как вы хотели - person akrun   schedule 23.09.2016simplify=FALSE
- более стандартный способ добиться этого, чемFUN = list
. - person Frank   schedule 23.09.2016data.table::transpose
и иметь какой-то другой пакет с конфликтом пространства имен, вызывающим проблемы. - person Frank   schedule 23.09.2016