我有一個如下所示的資料框。我試圖捕捉在所有 NA 值之前出現的值。例如,下面的資料框具有打開和關閉 NA 值。但是我需要捕獲一個 77 的值,因為在這個值之后,所有都是 NA 并且之間沒有任何值。誰能幫我用邏輯來捕捉這個?
asd <- data.frame(a = c(1,2,NA,3,NA,NA,6,8,3,2,5,6,77,NA,NA,NA,NA,NA,NA,NA,NA))
但如果它以非 NA 結尾
asd <- data.frame(a = c(1,2,NA,3,NA,NA,6,8,3,2,5,6,77,NA,NA,NA,NA,NA,NA,NA ,65,56))
Here it should capture 56 since it is the last value and no NA
uj5u.com熱心網友回復:
在基礎 R
with(asd1, tail(na.omit(a), 1))
#[1] 77
with(asd2, tail(na.omit(a), 1))
#[1] 56
樣本資料
asd1 <- data.frame(a = c(1,2,NA,3,NA,NA,6,8,3,2,5,6,77,NA,NA,NA,NA,NA,NA,NA,NA))
asd2 <- data.frame(a = c(1,2,NA,3,NA,NA,6,8,3,2,5,6,77,NA,NA,NA,NA,NA,NA,NA,65,56))
uj5u.com熱心網友回復:
你可以使用這個功能
library(xts)
last_before_na <- function(x){
if (!is.na(last(x))){
y = as.numeric(last(x))
return(c(y, last(which(x == y))))
} else {
y = last(na.omit(x[!is.na(x)]))
return(c(y,last(which(x == y))))
}
}
asd <- data.frame(a = c(NA,1,2,NA,3,NA,NA,6,8,3,2,5,6,77,NA,NA,NA,NA,NA,NA,NA,NA))
last_before_na(asd)
[1] 77 14
asd <- data.frame(a = c(1,2,NA,3,NA,NA,6,8,3,2,5,6,77,NA,NA,NA,NA,NA,NA,NA,65,56))
last_before_na(asd)
[1] 56 22
再來一個 77
asd <- data.frame(a = c(NA,1,2,NA,3,NA,NA,6,8,3,2,5,77,77,NA,NA,NA,NA,NA,NA,NA,NA))
last_before_na(asd)
[1] 77 14
不過我覺得還好..
xts::last(na.omit(asd))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352485.html
標籤:r
上一篇:基于R中的時間序列列提取資料
下一篇:R中基于組的比率計算
