2016-08-31 23 views
0

我有一個大數據集df;它的短版看起來是這樣的:複製上一行中一行的值R

Time Block Accuracy 
6087.8 Run2 NA 
633.2 Run2 NA 
547  Run2 incorrect 
135.2 Run2 NA 
6217.6 Run2 NA 
175.2 Run2 NA 
179  Run2 incorrect 

我想不正確 DF $精度的前行中複製的價值,所以它看起來像這樣:

Time Block Accuracy 
6087.8 Run2 NA 
633.2 Run2 incorrect 
547  Run2 incorrect 
135.2 Run2 NA 
6217.6 Run2 NA 
175.2 Run2 incorrect 
179  Run2 incorrect 

什麼是最有效的方法來做到這一點?

回答

1

要看到將受影響的行,運行:

which(df$Accuracy == "incorrect")-1 

which()返回是用於特定布爾語句真一個向量的元素(在此情況下,準確度的這些值是等於不正確)。然後,我們從矢量中的每個值減1以得到前一行的位置。

然後我們就可以對其進行修改:

df[which(df$Accuracy == "incorrect")-1, "Accuracy"] <- "incorrect" 

此找到所有行如上,並說:對於那些行和列「準確性」,用「不正確」替換值。

0

而不是硬編碼"incorrect",您可以使值低於每個NA向上移位。

na_bool = is.na(df$Accuracy) 
df[na_bool,]$Accuracy = df[c(FALSE,na_bool[-length(na_bool)]),]$Accuracy