Я изо всех сил пытаюсь сформулировать это, так что начнем.

У меня есть таблица с информацией о генах. Однако для ответа на этот вопрос я буду использовать общий пример.

> test_dt <- data.table(c("b", "a", "a", "b"), c(1, 4, 1, 5), c(4, 6, 4, 8))
> colnames(test_dt) <- c("category", "start", "end")
> test_dt
   category start end
1:        b     1   4
2:        a     4   6
3:        a     1   4
4:        b     5   8

Я хочу добавить в эту таблицу дополнительный столбец, который указывает, одинаковы ли start и end для разных значений category (в моем случае, как и в этом примере, я имею дело только с двумя категориями):

   category start end in_both
1:        b     1   4    TRUE
2:        a     4   6   FALSE
3:        a     1   4    TRUE
4:        b     5   8   FALSE

Я знаю, что это кажется до боли простым, но в моих знаниях R есть дыры, которые необходимо периодически заполнять и заделывать. Как бы я это сделал?

3
CelineDion 10 Ноя 2020 в 18:16

2 ответа

Лучший ответ

Один из вариантов может быть:

test_dt[, in_both := uniqueN(category) == 2, by = c("start", "end")]

   category start end in_both
1:        b     1   4    TRUE
2:        a     4   6   FALSE
3:        a     1   4    TRUE
4:        b     5   8   FALSE
2
tmfmnk 10 Ноя 2020 в 15:23

Вариант с all и %in%

test_dt[, in_both := all(c('b', 'a') %in% category), .(start, end)]
test_dt
#   category start end in_both
#1:        b     1   4    TRUE
#2:        a     4   6   FALSE
#3:        a     1   4    TRUE
#4:        b     5   8   FALSE
1
akrun 10 Ноя 2020 в 23:33