Нередко бывает надобно создать вектор с накопленными значениями на основе имеющегося вектора моментальных значений. Революционное студенчество обычно делает это в табличных процессорах, вроде Excel или Calc, но вообще-то, это можно сделать прямо не выходя из R при помощи циклов.
Например, есть у нас динамика некоторого показателя по годам (находится в таблице с данными dfr в столбце dfr$var1), а надо нам получить динамику накопленных к данному году значений этого показателя и записать ее в столбце dfr$var2, чтобы потом построить накопительную кривую.
Чтобы этого достичь, пишем таковы слова:
for (i in 1:(dim(dfr)[1]))
{
dfr$var2[i] <- sum(dfr$var1[1:i])
}
Что получаем в результате? Имели:
YEAR var1
1 1747 1
2 1782 1
3 1783 3
4 1787 2
5 1790 1
6 1793 2
Получили:
YEAR var1 var2
1 1747 1 1
2 1782 1 2
3 1783 3 5
4 1787 2 7
5 1790 1 8
6 1793 2 10
Толкую наиболее темные места.
for (i in 1:(dim(dfr)[1])) = для всех i в диапазоне (:) от 1 до числа, выражающего количество строк таблицы dfr. Почему так? Потому что dim(dfr) возвращает вектор из двух значений, первое из которых -- dim(dfr)[1] -- количество строк, второе -- dim(dfr)[2] -- столбцов таблицы с данными.
sum(dfr$var1[1:i]) = cумма значений от первого до i-го члена ряда dfr$var1.
This entry was originally posted at
http://kouprianov.dreamwidth.org/305558.html Comment wherever you wish.