Если я правильно понимаю, ОП хочет сгруппировать свои выборки, так что
TagA
и один отдельный элемент из TagB
, Приведенный ниже подход работает итеративно, помещая все выборки в одну группу, а затем ищет дубликаты (сверху вниз), которые помещаются в следующую группу. Это будет продолжаться до тех пор, пока не будет найдена группа с дубликатами.
data.table используется здесь, потому что он может обновлять по ссылке , то есть, не копируя весь объект.
library(data.table)
grouped <- as.data.table(preGroup)[order(SampleID)][, group := 1L][]
max_grp <- 1L
while (any(grouped[, anyDuplicated(TagA) | anyDuplicated(TagB), by = group]$V1)) {
max_grp <- max_grp + 1L
dups <- duplicated(grouped, by = c("group", "TagA")) |
duplicated(grouped, by = c("group", "TagB"))
grouped[dups, group := max_grp][]
stopifnot(max_grp <= nrow(grouped)) # just to prevent infinite looping
}
grouped
blockquote>SampleID TagA TagB group 1: 1 Tag03 Tag10 1 2: 2 Tag04 Tag06 1 3: 3 Tag05 Tag07 1 4: 4 Tag03 Tag09 2 5: 5 Tag04 Tag10 2 6: 6 Tag05 Tag06 2 7: 7 Tag01 Tag06 3 8: 8 Tag02 Tag07 2 9: 9 Tag03 Tag08 3 10: 10 Tag01 Tag10 4 11: 11 Tag02 Tag06 4 12: 12 Tag03 Tag07 4 13: 13 Tag01 Tag08 5 14: 14 Tag03 Tag09 5 15: 15 Tag04 Tag10 5 16: 16 Tag01 Tag07 6 17: 17 Tag02 Tag08 6 18: 18 Tag03 Tag09 6 19: 19 Tag04 Tag10 6
Обратите внимание, что этот результат на одну группу меньше, чем выбранный OP
postGroup
, который содержит седьмую группу только с одной выборкой.Мы можем выполнить некоторые проверки, чтобы проверить, что условие 2. выполнено:
grouped[, anyDuplicated(TagA), by = group]
blockquote>group V1 1: 1 0 2: 2 0 3: 3 0 4: 4 0 5: 5 0 6: 6 0
grouped[, anyDuplicated(TagB), by = group]
blockquote>group V1 1: 1 0 2: 2 0 3: 3 0 4: 4 0 5: 5 0 6: 6 0
Примечание
Это может быть не самый эффективный подход и / или реализация. Однако я хотел иметь под рукой что-то, что даст ожидаемый результат, прежде чем начать думать об оптимизации.
LIRC имеет репозиторий кодов дистанционного контроллера, где можно найти коды для различных производителей инфракрасных пультов ДУ.
Что-то вроде этого? Если страница не загружается, просмотрите источник для других ссылок. Например, вот протокол Sony.
Для использования необработанного светодиода я сцепил бы фотодиод или фототранзистор к осциллографу, таким образом, Вы видите то, что отправляется. У меня создалось впечатление, что импульсы являются последовательными данными ASCII, никакой идеей о материале как скорость в бодах. Затем используйте PIC https://en.wikipedia.org/wiki/PIC_microcontrollers или Atmel в небольшом поле со светодиодом и батареей. Или встройте его в свое любимое кресло.