Я новичок в циклах и функциях в R.
Представьте, что у меня есть измерения через каждые 0,1 единицы от 1,0 до 3,5 для четырех образцов (A, B, C, D).
Я хочу найти средние значения (+/- 0,2 единицы) около 1,5, 2,5 и 3,5. Итак, для 1.5 я усредняю значения c (1.3, 1.4, 1.5, 1.6 и 1.7) и т. Д.
Как я могу написать заявление, чтобы суммировать эти три средних значения для всех четырех образцов? Я думаю, это может начаться примерно так:
X <- (1.5, 2.5, 3.5)
for (i in X)
{
avg <- colMeans(subset(data,data$measurement > (i - 0.2) & data$measurement < (i + 0.2)))
}
Я также подумал об использовании '['
:
colMeans(data[data$measurement > (i-0.2) & data$measurement < (i+0.2)])
Спасибо за помощь, sqldf - действительно хороший инструмент, пример делает именно то, что я хочу!
Однако я не могу заставить его работать с реальным набором данных. Я изменил код так, чтобы он выглядел (извините, это больше не соответствует образцу данных):
M <- sqldf("select r.i,avg(w.X1),avg(w.X2),avg(w.X3),avg(w.X4)
from Y r, Y w
where w.i betreen r.i - 1 and r.i + 1
group by r.i
having r.i+0.0 in (600, 700, 800)")
Чтобы контекстуализировать это, я пытаюсь суммировать среднее значение всех точек из 599–601, 699–701 и 799–801 для четырех столбцов с именами X1, X2, X3, X4. Я назвал этот фрейм данных «Y». Строки на самом деле являются длинами волн, а данные указывают количество света, отраженного на этой длине волны.
Вы видите что-то не так с приведенным выше кодом? - Он создает матрицу с правильными размерами, но средние значения не совпадают с тем, что они должны быть из более крупного набора данных. Мне интересно, не понимаю ли я чего-то в коде, например, важности переменной 'w'.
cut
для создания группирующей переменной, а затем использоватьtapply(vals, group, mean)
. Тогда вы не потеряете кучу данных в 1.8, 1.9, 2.0, 2.1 и 2.2. Вам действительно следует опубликовать пример набора данных. - person IRTFM   schedule 26.03.2015