#r #while-loop
#r #во время цикла
Вопрос:
Я хочу сэкономить время в матрице или фрейме данных таким образом, чтобы это упорядочивало меня
i <- 15#year
pon<-list()
while (i < 63) {
pon[i] <-cumprod( vlookup(i:62,Tabla_de_mortalidad_css,4))
i = i 1}
это моя команда, которую я выполняю
Я хочу, чтобы вы напечатали что-то вроде этого: например
v1 v2 v3
1
2 1
3 2 1
4 3 2
. . .
. . .
. . .
v1, v2, v3 — мои переменные
Ответ №1:
Вам нужно что-то подобное?
n <- 1:63
mat <- cbind(1:63, sapply(1:3, function(x) c(rep(NA, x), head(n, -x))))
mat
# [,1] [,2] [,3] [,4]
# [1,] 1 NA NA NA
# [2,] 2 1 NA NA
# [3,] 3 2 1 NA
# [4,] 4 3 2 1
# [5,] 5 4 3 2
# [6,] 6 5 4 3
# [7,] 7 6 5 4
#...
#...
Комментарии:
1. Спасибо за комментарий, у меня все еще есть вопрос, как мне заставить эту команду работать для моего кода, который у меня есть выше, то есть:`i <- 15
# year
while (i <63) {`put [i] <-cumprod (vlookup (i: 62, Mortality_Table_css, 4))
` i = i 1}` потому что я ищу i в своей таблице, в диапазоне i: 62, и этот результат накапливает его для меня, я хочу сохранить его в фрейме данных, где каждый i должен быть столбцом, но если вы посмотрите на следующую итерацию, это будет i = 16, то есть мне нужно и так далее длякаждый из столбцов.2. Я не понимаю, что делает ваш код, что
vlookup
такое и т.д.
Ответ №2:
использовать tidyverse
library(tidyverse)
n <- 1:10
Lag <- 1:3
df <- data.frame(n = n)
bind_cols(df, map_dfc(Lag, ~transmute(df, !!paste0("Lag", .x) := lag(n, n = .x))))
#> n Lag1 Lag2 Lag3
#> 1 1 NA NA NA
#> 2 2 1 NA NA
#> 3 3 2 1 NA
#> 4 4 3 2 1
#> 5 5 4 3 2
#> 6 6 5 4 3
#> 7 7 6 5 4
#> 8 8 7 6 5
#> 9 9 8 7 6
#> 10 10 9 8 7
Создано 2020-12-11 пакетом reprex (версия 0.3.0)
Комментарии:
1.Спасибо за комментарий, у меня все еще есть вопрос, как мне заставить эту команду работать для моего кода, который у меня есть выше, то есть `i <- 15` # year
while (i <63) {
put [i] <-cumprod (vlookup (i: 62, Mortality_Table_css, 4))
i = i 1}
, потому что я ищу i в своей таблице в диапазоне i: 62, и этот результат накапливает его для лично я хочу сохранить его во фрейме данных, где каждый i должен быть столбцом, но если вы посмотрите на следующую итерацию, это будет i = 16, то есть мне нужно и так далее для каждого из столбцов.
Ответ №3:
Мы можем сделать это легко с shift
помощью from data.table
library(data.table)
do.call(cbind, shift(1:10, n = 1:3))
-вывод
# [,1] [,2] [,3]
# [1,] NA NA NA
# [2,] 1 NA NA
# [3,] 2 1 NA
# [4,] 3 2 1
# [5,] 4 3 2
# [6,] 5 4 3
# [7,] 6 5 4
# [8,] 7 6 5
# [9,] 8 7 6
#[10,] 9 8 7
Комментарии:
1.Спасибо за комментарий, у меня все еще есть вопрос, как мне заставить эту команду работать с моим кодом, который у меня есть выше, то есть `i <- 15` # year
while (i <63) {
pon [i] <-cumprod (vlookup (i: 62, Mortality_Table_css, 4))
i = i 1}
, потому что я ищу i в своей таблице в диапазоне i: 62, и этот результат накапливает его дляя, чего я хочу, так это сохранить его во фрейме данных, где каждый i должен быть столбцом, но если вы посмотрите на следующую итерацию, это будет i = 16, то есть мне нужно и так далее для каждого из столбцов.