просмотр фрейма данных и экспорт данных - PullRequest
0 голосов
/ 03 августа 2020

Я создал фрейм данных (df) с x и Temp.

Мне нужно решить два уравнения (fb_T = 1.09 ^ Temp и рост = (1 * fb_T)), где fb_T вычисляется в цикле через Temp из каждой строки фрейма данных. Затем каждый fb_T используется для расчета роста.

В идеале я хочу создать фрейм данных с x, Temp и соответствующими fb_T и ростом, чтобы я мог построить его.

Я пробовал (i in seq_len (nrow (df))), но для fb_T я получаю первое значение как 0, тогда все остальные - это NA, а для роста я получаю только одно значение.

Как я могу получить fb_T до l oop через Temp в кадре данных и выходы fb_T на l oop через уравнение роста?

 x <- c(1, 2, 3, 4, 5)
 Temp <- c(10, 8, 6, 5, 2)
 df <- cbind(x, Temp)

 init <- rep(NA_real_, n_steps+1)
 init[1] <- 0.
 fbt <- init

 for(i in seq_len(nrow(df))){
   #for(i in 1:nrow(df)) {


    fb_T = 1.09^Temp[i]
    growth = (1 * fb_T)
 }

fbt
growth

Я рассчитал вручную и ожидал результат:

 x <- c(1, 2, 3, 4, 5)
 Temp <- c(10, 8, 6, 5, 2)
 fb_T <- c(2.367364, 1.992563, 1.6771, 1.538624, 1.1881)
 growth <- c(2.367364, 1.992563, 1.6771, 1.538624, 1.1881)
 df <- cbind(x, Temp, fb_T, growth)

Ответы [ 2 ]

0 голосов
/ 03 августа 2020

Вы можете сделать это напрямую, поскольку ^ векторизован.

df <- data.frame(x, Temp)
df$fb_T <- 1.09^df$Temp

и поскольку столбец growth такой же, как fb_T, мы можем просто скопировать его.

df$growth <- df$fb_T
df
#  x Temp     fb_T   growth
#1 1   10 2.367364 2.367364
#2 2    8 1.992563 1.992563
#3 3    6 1.677100 1.677100
#4 4    5 1.538624 1.538624
#5 5    2 1.188100 1.188100

Если это часть более крупного процесса, и вы хотите сделать это в al oop, мы можем сделать:

#Initialise new columns
df$fb_T <- NA
df$growth <- NA

#For every row
for(i in seq_len(nrow(df))) {
   df$fb_T[i] = 1.09^df$Temp[i]
   df$growth[i] = (1 * df$fb_T[i])
}
0 голосов
/ 03 августа 2020
d <- tibble(x=c(1, 2, 3, 4, 5), Temp=c(10, 8, 6, 5, 2))
d %>% mutate(fb_T=1.09**Temp, Growth=fb_T)
d
# A tibble: 5 x 4
      x  Temp  fb_T Growth
  <dbl> <dbl> <dbl>  <dbl>
1     1    10  2.37   2.37
2     2     8  1.99   1.99
3     3     6  1.68   1.68
4     4     5  1.54   1.54
5     5     2  1.19   1.19

Причина, по которой вы получаете только одно значение для fb_T и growth в своем коде, заключается в том, что они являются скалярами. каждая итерация l oop перезаписывает предыдущие значения.

Я разделяю путаницу @ RonalShah по поводу growth = (1 * fb_T).

...