Вычтите наблюдение из другого в другом столбце и добавьте значение c к результату, чтобы создать новое наблюдение в первом столбце в R - PullRequest
0 голосов
/ 22 марта 2020

У меня есть что-то вроде этого,

A    B     C 
100  24      
     18
     16
     21
     14

Я пытаюсь написать функцию, которая вычисляет C = AB для соответствующей строки, а затем добавляет 20 к C, то есть A для следующего строка и повторяет шаг, и это должно быть так в конце.

A     B     C
100   24    76
96    18    78
98    16    82
102   21    81
101   14    87

Я делаю это вручную, как df $ C [1] = df $ A [1] - df $ B [1], а затем df $ A [2] = df $ C [1] +20 и повторяем это. Я хотел бы создать функцию вместо этого. Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Вот еще один подход, использующий for l oop:

data

df <- data.frame(A=NA, B = c(24L, 18L, 16L, 21L, 14L),C=NA)

Инициализация первой строки из df

df$A[1] <- 100
df$C[1] <- df$A[1]-df$B[1]

Заполните оставшиеся строки в df

for (i in 1:(length(df$B)-1)){
df$C[i+1]   <- df$C[i]-df$B[i+1]+20
df$A[i+1]   <- df$C[i]+20 
}

Выходные данные

df
   A  B  C
1 100 24 76
2  96 18 78
3  98 16 82
4 102 21 81
5 101 14 87
0 голосов
/ 22 марта 2020

Мы можем начать только с столбца B, а затем вычислить A и C соответственно.

start_value <- 100
df$A <- c(start_value, start_value - cumsum(df$B) + 20 * 1:nrow(df))[-(nrow(df) + 1)]
df$C <- df$A - df$B
df

#   B   A  C
#1 24 100 76
#2 18  96 78
#3 16  98 82
#4 21 102 81
#5 14 101 87

данные

df <- structure(list(B = c(24L, 18L, 16L, 21L, 14L)), 
     class = "data.frame", row.names = c(NA, -5L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...