цикл для определения суммы, а затем получения позиции этой суммы

#r #loops #while-loop

#r #циклы #цикл while

Вопрос:

У меня есть этот data.frame, называемый EXAMPLE, с 4 переменными:

 date <- c(2010, 2011, 2012, 2013)
new_york <- c(10,20,22,28)
berlin <- c(0,51,45,12)
tokyo <- c(2,15,20,13)

EXAMPLE <- data.frame(date, new_york, berlin, tokyo)
  

Я хочу определить в каждом столбце, в какой позиции было суммировано не менее 50, а также сохранить эту сумму. Например, в столбце new_york было суммировано 52 в строке 3.

Я думал о чем-то подобном ниже, но это не сработало:

 x <- 1
  while(sum(EXAMPLE$berlin[1:x]) <= 50) {
    a <-x
  }
  

Я ценю, если кто-то может помочь.

Комментарии:

1. То, что вы ищете, называется «совокупной суммой». В R это может быть вычислено с помощью cumsum(EXAMPLE) .

Ответ №1:

 out <- lapply(EXAMPLE[,-1], cumsum)
names(out) <- paste0(names(out), "_cumulative")
options(width=123, length=99999)
cbind(EXAMPLE, out)
#   date new_york berlin tokyo new_york_cumulative berlin_cumulative tokyo_cumulative
# 1 2010       10      0     2                  10                 0                2
# 2 2011       20     51    15                  30                51               17
# 3 2012       22     45    20                  52                96               37
# 4 2013       28     12    13                  80               108               50
  

Ответ №2:

Вот эквивалентная tidy версия ответа @r2evans…

 library(dplyr)

EXAMPLE %>% 
   mutate(across(new_york:tokyo, 
                 cumsum, 
                 .names = "cumsum_{.col}")
          )

#>   date new_york berlin tokyo cumsum_new_york cumsum_berlin cumsum_tokyo
#> 1 2010       10      0     2              10             0            2
#> 2 2011       20     51    15              30            51           17
#> 3 2012       22     45    20              52            96           37
#> 4 2013       28     12    13              80           108           50