У меня есть датафрейм с двумя столбцами: год и область (целые числа).
df<-data.frame(year = 1:7,
area = c(5,0,0,8,0,8,4))
year area
1 1 5
2 2 0
3 3 0
4 4 8
5 5 0
6 6 8
7 7 4
Я хотел бы:
- Найти первый год с областью> 0
- Если найден, проверить сумму площадей за два года подряд.Если сумма> 0, выведите год значения.Иначе, (если сумма = 0), ищите следующее число в векторе.
Таким образом, в этом случае год # 1 имеет площадь 5. Но, сумма площади двух следующих лет(# 2 и # 3) равно 0. Поэтому мне нужно проверить новый год в кадре данных с областью> 0, то есть годом # 4.Опять же, я проверяю сумму лет № 5 и № 6, которая равна 8 (> 0).Мой ожидаемый результат - "год 4".
То, что я делал до сих пор:
Я могу найти первый год с area >0
:
firstYear<-min(df$year[df$area > 0])
И вычислите сумму area
двух следующих лет:
sum.year = sum(subset(df, year == firstYear + 1 | year == firstYear + 2)$area)
Что я не уверен, так это каквключить операторы if..else
или while
для перехода к другому year
, если сумма двух следующих лет = 0?
Я пытался использовать оператор if..else
if (sum.year >0) {
print(firstYear)
} else firstYear = firstYear + 1 # move and check the next year
но я думаю, что мне нужно включить цикл while
для перемещения по моим записям:
while (firstYear <= max(df$year)) {
if (sum.year >0) {
print(firstYear)
} else firstYear = firstYear + 1
}
Но я не могу понять, как соединить операторы if..else и while?Спасибо за вашу помощь!