簡體   English   中英

從不同列中的另一個觀察值中減去一個觀察值,並將特定值添加到結果中以在 R 的第一列中創建一個新觀察值

[英]Subtract an observation from another in different column and add a specific value to the result to create a new observation in the first column in R

我有這樣的東西,

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

我正在手動進行 atm 之類的操作
df$C[1] = df$A[1] - df$B[1] 然后
df$A[2] = df$C[1]+20 並重復它。
我想創建一個函數而不是這樣做。 任何幫助,將不勝感激。

這是使用for循環的另一種方法:

數據

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

我們可以只從B列開始,然后分別計算AC

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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM