У меня есть dataframe с несколькими столбцами информации, например:R резюме высчитывает dataframe из dataframe с несколькими столбцами информации
df <- data.frame(chr=c("chr1", "chr1", "chr1", "chr1", "chr1", "chr1", "chr1", "chr1", "chr2", "chr2"), Gene=c("Happy", "Happy", "Happy", "Happy", "Happy", "Happy", "Happy", "Happy", "Sad", "Sad"), site = c(100, 120, 130, 300, 2000, 2300, 2342, 2451, 120, 123), value=c(20, 25, 21, 30, -80, 31, -79, -90, 10, 13))
> df
chr Gene site value
1 chr1 Happy 100 20
2 chr1 Happy 120 25
3 chr1 Happy 130 21
4 chr1 Happy 300 30
5 chr1 Happy 2000 -80
6 chr1 Happy 2300 31
7 chr1 Happy 2342 -79
8 chr1 Happy 2451 -90
9 chr2 Sad 120 10
10 chr2 Sad 123 13
Я хотел бы создать сводную dataframe, который вычисляет для каждого гена том, сколько кластерные регионы есть. Я считаю, что кластер имеет любое количество строк, где разница в номере сайта не превышает 1000 (мои данные сортируются по chr и сайтам). Для начала я создал новый столбец для вычисления расстояния между узлами в последовательных строках с помощью:
df$Distance <- c(1001, diff(df$site, lag=1, differences=1))
> df
chr Gene site value Distance
1 chr1 Happy 100 20 1001
2 chr1 Happy 120 25 20
3 chr1 Happy 130 21 10
4 chr1 Happy 300 30 170
5 chr1 Happy 2000 -80 1700
6 chr1 Happy 2300 31 300
7 chr1 Happy 2342 -79 42
8 chr1 Happy 2451 -90 109
9 chr2 Sad 120 10 -2331
10 chr2 Sad 123 13 3
Я хотел бы создать сводную таблицу со строкой для каждого гена, который суммирует сколько кластеров находятся в пределах каждого гена где среднее значение является либо положительным, либо отрицательным. В приведенном выше примере таблица будет выглядеть следующим образом:
Gene PositiveClusters NegativeClusters
1 Happy 1 1
2 Sad 1 0
@beginneR Я считаю, что кластер представляет собой группу сайтов, где расстояние между двумя сайтами не превышает 1000. Вот почему я вычислил расстояние между двумя сайтами, так что, если расстояние больше 1000, то сайт является началом нового кластера. – user2165857