Мы можем сгруппировать по 'short.name', получить first
и last
элемент 'middle', суммировать его и умножить на 0.5
library(dplyr)
df %>%
group_by(short.name) %>%
summarise(middle = 0.5 *(first(middle) + last(middle))) %>%
pull(middle)
#[1] 7472660 7896474 7455598
data
df <- structure(list(chromosome = c("chr8", "chr8", "chr8", "chr8",
"chr8", "chr8"), start = c(7447754L, 7462707L, 7463443L, 7470308L,
7475011L, 7896474L), end = c(7447754L, 7462707L, 7463443L, 7470308L,
7475011L, 7896474L), name = c("SPAG11B_1", "SPAG11B_2", "SPAG11B_3",
"DEFB104B_1", "DEFB104B_2", "DEFB4A_2"), short.name = c("SPAG11B",
"SPAG11B", "SPAG11B", "DEFB104B", "DEFB104B", "DEFB4A"),
start.gene = c(7447754L,
7447754L, 7447754L, 7470308L, 7470308L, 7894677L), middle = c(7447754L,
7462707L, 7463443L, 7470308L, 7475011L, 7896474L)), class = "data.frame", row.names = c(NA,
-6L))