Если вы преобразуете свои данные в «длинный» формат, вы можете получить суммы с помощью операции группировки
library(tidyverse)
Answers <-
dat %>%
gather(key = 'NumNode', value = 'value', Number_2:node_age_4) %>%
group_by(grp = parse_number(NumNode)) %>%
do(Answer = with(.data, value[grep('Num', NumNode)] + value[grep('node', NumNode)]))
# # A tibble: 3 x 2
# grp Answer
# <dbl> <dbl>
# 1 2.00 1.00
# 2 3.00 2.00
# 3 4.00 3.00
Тогда ваша логика if
может быть реализована простым accumulate
использованием min
answers <- accumulate(Answers$Answer, pmin)
# [1] 1 1 1
Вы можете добавить результаты в виде столбцов dat
с помощью
dat[paste0('Answer_', Answers$grp)] <- ifelse(is.list(answers), answers, as.list(answers))
Пример данных, имеющих> 1 строку
dat <- data.frame(id = "T2", Height = 1.2,
Number_2 = 1:2, node_age_2 = 0:1,
Number_3 = 1:2, node_age_3 = 1:2,
Number_4 = 1:2, node_age_4 = 2:3)
Вывод из метода выше
id Height Number_2 node_age_2 Number_3 node_age_3 Number_4 node_age_4 Answer_2 Answer_3 Answer_4
1 T2 1.2 1 0 1 1 1 2 1 1 1
2 T2 1.2 2 1 2 2 2 3 3 3 3