Этот пост похож на этот , но с другим подходом. У меня есть два фрейма данных, X и Y, которые я показываю вам здесь:
X <- data.frame(V1 = c("chr1", "chr1", "chr1", "chr2", "chr2", "chr2"),
Start = c(0, 540, 920, 0, 582, 715 ),
Stop = c(230, 720, 1270, 350, 635, 950))
Y <- data.frame(V1 = c("chr1", "chr1", "chr1", "chr2", "chr2", "chr2"),
Start = c(3, 16, 180,
15, 585, 800 ),
Stop = c(15, 24, 201,
102, 612, 850),
Dif = c(12, 8, 21,
87, 27, 50))
Я хочу получить Z, который:
Z <- data.frame(V1 = c("chr1", "chr1", "chr1", "chr2", "chr2", "chr2"),
Start = c(0, 540, 920, 0, 582, 715 ),
Stop = c(230, 720, 1270, 350, 635, 950),
Count = c(3, 0, 0, 1, 1, 1)
Mean = c(13.66, 0, 0, 87, 27, 50))
Что такое:
V1 = X$V1
Start = X$Start
Stop = X$Stop
Count = Количество строк Y внутри диапазона координат Start / Stop of X, которое я получаю с помощью:
library(tidyverse)
X %>%
mutate(Count = pmap_int(list(V1, Start, Stop), ~filter(Y, V1 == ..1, Start >= ..2, Stop <=..3) %>% nrow))
Mean = среднее значение разности между Y $ Start иY $ Стоп в вышеуказанном диапазоне (в первом случае это 12 + 8 + 21/3 = 13,66, потому что эти три - три валюты в Y между первым диапазоном X.
Я не знаюкак получить этот столбец Mean, потому что, когда я пытаюсь использовать аналогичный подход, который я использовал со столбцом Count, я не знаю, как использовать mean () без получения ошибки.