Я пытаюсь выделить уникальные группы элементов в моих данных - уникальные группировки строк, связанных с ключевым столбцом, а не уникальные элементы, что больше всего использует уникальную функцию для. Вопрос берет некоторое тщательное чтение ... поэтому, пожалуйста, будьте любезны, чтобы сначала переварить пример.Найти уникальные «группы предметов» в многомерных данных
Чтобы быть ясным, Я НЕ хочу уникальное подмножество столбца группы, а также не хочу уникальных подмножеств элементов и даже уникальных комбинаций групп и элементов. Я знаю, что они были охвачены в другом месте unique() for more than one variable. То, что я хочу, это уникальные наборы элементов, где наборы задаются группами.
Вот пример
set.seed(1234)
library(data.table)
A <- data.table(group = rep(c("A","B","C","D","E","F"),each = 4),
item = c(1, 2, 4, 3, 5, 2, 3, 6, 10, 12, 1, 2, 1, 2, 4, 3, 6, 3,
5, 2, 10, 12, 1, 2), c = runif(8))
A <- A[-23, ] #so we can have an example of unbalanced groups
> A
group item c
1: A 1 0.15904600
2: A 2 0.03999592
3: A 4 0.21879954
4: A 3 0.81059855
5: B 5 0.52569755
6: B 2 0.91465817
7: B 3 0.83134505
8: B 6 0.04577026
9: C 10 0.15904600
10: C 12 0.03999592
11: C 1 0.21879954
12: C 2 0.81059855
13: D 1 0.52569755
14: D 2 0.91465817
15: D 4 0.83134505
16: D 3 0.04577026
17: E 6 0.15904600
18: E 3 0.03999592
19: E 5 0.21879954
20: E 2 0.81059855
21: F 10 0.52569755
22: F 12 0.91465817
23: F 2 0.04577026
#The unique groups are A:F, and the unique items are 1:6,10,12.
#The unique sets of items are: # (set1) 1,2,3,4; (set2) 5,2,3,6;
#(set3) 10,2,1,2; (set4) 10,12,2
Я хочу, чтобы получить эти уникальные наборы элементов (опять же отметим, что наборы пункт формируются группами). (Третий столбец на этот раз мало значит. Для удовольствия я включаю суммы по каждому «пункту»). Таблица вывода должна выглядеть следующим образом:
group item c
A 1 0.68474355 #note that groups A and D share this same set of items (set1)
A 2 0.95465409
A 4 1.05014459# c sums groupAitem4$c with groupDitem4$c
A 3 0.85636881
B 5 0.74449709 # group E has the same items (set2), even if not the same order, c is totaled by item.
B 2 1.72525672
B 3 0.87134097
B 6 0.20481626
C 10 0.159046
C 12 0.03999592
C 1 0.21879954
C 2 0.81059855
F 10 0.52569755 #Not the same as group C
F 12 0.91465817
F 2 0.04577026
Я полагаю, что может быть способом идти через перекроить, что было бы весьма неудобно. Мои данные большие, поэтому очень эффективные процедуры, такие как data.table
.
Не фантазии/эффективную, но 'strsplit (уникальные (paste0 (A $ группы«»A $ пункта)), ",") ' –
Как вы хотите обрабатывать различные значения' A $ c', которые принадлежат каждому уникальному спариванию? Взгляните на 'aggregate' и' plyr' для общих идей. –
Возможный дубликат [Unique() для нескольких переменных] (http://stackoverflow.com/questions/7790732/unique-for-more-than-one-variable) и http://stackoverflow.com/questions/ 9944816/unique-on-a-dataframe-only-selected-columns? Rq = 1 и http://stackoverflow.com/questions/10873203/r-find-all-unique-values-among-subsets-of- a-data-frame? rq = 1 –