我有这个数据框:
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中做到这一点。任何帮助都会非常感激,因为我觉得我错过了一些基本的东西。谢谢!
答案 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