#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