Извините, ниже приведен df, похожий на тот, с которым мне приходится работать, но гораздо меньше: (я пропустил много строк, чтобы было легче смотреть.)
x y variable values
1 1 5 a 9
2 2 5 a 2
3 3 5 a 9
4 4 5 a 8
5 5 5 a 4
...
22 2 1 a 7
23 3 1 a 9
24 4 1 a 7
25 5 1 a 10
26 1 5 b 7
27 2 5 b 8
...
48 3 1 b 8
49 4 1 b 7
50 5 1 b 2
dfВышеуказанный прибор предназначен для считывания флуоресцентных пластин, который сканирует интенсивность света в области, разделяя ее на 25 секторов (5х5) и измеряя каждый сектор по отдельности, давая по одному значению.Порядок измерений - первый левый верхний угловой сектор и последний правый нижний сектор последний.Чтобы сделать его более графическим:
01 02 03 04 05
06 07 08 09 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
Заполнение значений из df, указанных выше (+ координаты), будет выглядеть так:
(5) ___ 9 - 2 - 9- 8 - 4
(4) ___ 7 - 7 - 2 - 5 - 3
(3) ___ 5 - 4 - 7 - 8 - 9
(2) ___ 6 - 6 - 3 - 5 - 9
(1) ___ 4 - 7 - 9 - 7 - 10
(y ^, x>) (1) (2) (3) (4) (5)
Мне нужно прочитать максимальное значение для каждой переменной и вычислить среднее значениеэто значение и (до) 9 полей, окружающих его.В области / «переменной» выше («a») самое высокое значение сектора равно 10 в нижнем правом углу, которое окружено значениями 5,9 и 7. Отсюда и результат, который я ищу для переменной «a"7,75 ((5 + 9 + 7 + 10) / 4).
Я представляю код, похожий на что-то вроде этого (я знаю, что вы пишете не так, но я незнать лучше):
среднее (максимальное значение в переменной, значение в точке x (максимального значения в переменной) -1, y (максимального значения в переменной)), значение в точке x (максимального значения в переменной)-1, y (с максимальным значением в переменной) +1) .....
Следующая проблема состоит в том, что инструмент выполнит сканирование 96 областей (= "переменных").И в идеале мне нужно решение, которое автоматически дает мне это специальное среднее значение для каждой / всех переменных без необходимости писать почти идентичный код 96 раз.
Я знаю, что это требует много, но я работал надэто на некоторое время, и я просто не могу придумать решение или даже хороший способ найти его.
Большое спасибо за любую помощь!
Тим,
PS: Использование этого кода R создает случайную версию df, которую я представляю выше:
df <- data.frame(x = c(1:5), y = rep(c(5:1), each=5),variable = rep(c("a", "b"), each=25 ), values = floor(runif(50, min=1, max=10)))