2016-03-04 37 views
-1

我需要更新對象值==「修復」,以便它們更新到相同變量中的繼續值的值。我的問題是,當以前的值也是==「修復」它沒有看到更新的值(因爲很明顯它還沒有更新,爲什麼不呢?)。恐怕我沒有詞彙來問正確的問題,所以這就是它的樣子。如何將對象值設置爲相同變量的滯後值?

因此,如果這是我的數據幀(DF):

row  x 
1  a 
2  b 
3  fix 
4  fix 
5  fix 
6  b 
7  a 
8  fix 
9  fix 

我跑我的代碼:

df$x2 <- ifelse(df$x=="fix",lag(df$x2),df$x) 

我得到這個:

row  x  x2 
1  a  a 
2  b  b 
3  fix  b 
4  fix  fix 
5  fix  fix 
6  b  b 
7  a  a 
8  fix  a 
9  fix  fix 

但我要的是這個:

row  x  x2 
1  a  a 
2  b  b 
3  fix  b 
4  fix  b 
5  fix  b 
6  b  b 
7  a  a 
8  fix  a 
9  fix  a 

任何幫助將不勝感激(包括如何更好地框架問題和/或我的問題的標題)。

+0

我試着運行在一個循環功能上面的代碼,但顯然沒有做是正確的,因爲我得到錯誤「分配被禁止」。 – AJost

+0

如果您認爲「修復」值缺失,則基本上要求進行「最後觀察結轉」(LOCF)替換。看到這個問題的相關答案:http://stackoverflow.com/questions/2776135/last-observation-carried-forward-in-a-data-frame – MrFlick

+1

從鏈接的答案'動物園:: na.locf(替換(DF $ x,df $ x ==「fix」,NA))' –

回答

0

也許不是最快的國家之一(因爲我使用的循環),但工作:

df2 <- data.frame(x=c("a","b", "fix", "fix", "fix", "b", "a", "fix", "fix"), stringsAsFactors = FALSE) 
#df2 <- cbind(df2, data.frame(x2=character(nrow(df2)), stringsAsFactors = FALSE)) 

for(i in 1:nrow(df2)) 
{ 
    if(df2$x[i]=="fix") 
    { 
     df2$x2[i] <- df2$x2[i-1] 
    } 
    else 
    { 
     df2$x2[i] <- df2$x[i] 
    } 
} 
df2 
+0

第二行是不必要的。該列將在循環中創建。 –