2014-10-16 65 views
4

替換數據幀的零我有與含有零個值的列的數據幀:R 2與最後的非零值

a <- c(1:10) 
b <- c(1,0,0,0,0,-1,-1,0,0,1) 
df <-data.frame(a,b) 
df 

如何可以與最後一個非零值即柱DF $ B來代替零個值是:

1,-1,-1,-1,-1,-1,-1,1,1,1 

謝謝你的幫助。

回答

7

以下是na.locfzoo的一種方法。儘管此方法在此過程中確實將某些值更改爲NA,但代碼很好,並且很輕鬆。

library(zoo) 
na.locf(with(df, ifelse(b == 0, NA_real_, b)), fromLast = TRUE) 
# [1] 1 -1 -1 -1 -1 -1 -1 1 1 1 

這個的替代,以及一個可能是快於ifelse長載體,是

na.locf(with(df, { is.na(b) <- b == 0; b }), fromLast = TRUE) 
# [1] 1 -1 -1 -1 -1 -1 -1 1 1 1 
+0

+1尼斯 - 我不知道該功能的。 – nrussell 2014-10-16 22:01:16

+0

非常感謝。十分優雅。 – 2014-10-16 22:42:57

+2

另一個變體:'na.locf(with(df,replace(b,b == 0,NA)),fromLast = TRUE)' – thelatemail 2014-10-20 00:11:54