你如何在R中进行相对引用?

时间:2014-04-05 12:53:02

标签: r dataframe row

我有这个数据框:

 A <- c(10, 20, 30, 40, 5)
 B <- c(5, 0, 0, 0, 0)
 df = data.frame(A, B)

我想用A和B [i-1]的总和替换B中的0。我到处搜索,但我觉得我错过了一些非常基本的东西。这是我想要的结果:

    A B
 1 10 5
 2 20 25
 3 30 55
 4 40 95
 5  5 100

我试过这个,但它没有用:

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

在Excel中,这可能是B $ 2 = A $ 2 + B $ 1。我无法弄清楚如何在R中做到这一点。任何帮助都会非常感激,因为我觉得我错过了一些基本的东西。谢谢!

2 个答案:

答案 0 :(得分:1)

你非常接近。试试这个:

for(i in 2:nrow(df)){
 df$B[i] <- df$A[i] + df$B[i-1]
 }

为了扩展到这些评论,这样的工作可以吗?

for(i in 2:nrow(df)){
 if((df$A[i] + df$B[i-1]) > 60) df$B[i] <- df$B[i-1] else{
  df$B[i] <- df$A[i] + df$B[i-1]}
 }

答案 1 :(得分:0)

# Data 
# I changed one of the later values of B to non-zero to confirm that only
# the zero values of B were getting changed

A <- c(10, 20, 30, 40, 5)
B <- c(5, 0, 0, 10, 0)
(df = data.frame(A, B))
#   A  B
# 1 10  5
# 2 20  0
# 3 30  0
# 4 40  0
# 5  5  10


for(i in 2:nrow(df)) {
    if(df$B[i]==0) df$B[i] <- df$A[i] + df$B[i-1]
        if(df$B[i] >= 60) df$B[i] <- df$B[i-1] 
  }

df
#   A  B
# 1 10  5
# 2 20 25
# 3 30 55
# 4 40 55
# 5  5 10