我有一個data.table
,其中有許多缺失值,我想要一個變量,它爲每組中的第一個非missin值給出1。R:在data.table列中按組找到第一個非NA觀察值
說我有這樣的data.table:
library(data.table)
DT <- data.table(iris)[,.(Petal.Width,Species)]
DT[c(1:10,15,45:50,51:70,101:134),Petal.Width:=NA]
現在有missings之初,在月底之間。我已經嘗試了兩個版本,一個是:
DT[min(which(!is.na(Petal.Width))),first_available:=1,by=Species]
但只發現了全球最小的(在這種情況下,setosa得到正確1)組,而不是最低。我認爲這是因爲data.table
我的第一個子集,然後按組排序,正確嗎?因此,它只適用於全球最小值爲which(!is.na(Petal.Width))
的行,這是第一個非NA值。
在j處的測試第二次嘗試:
DT[,first_available:= ifelse(min(which(!is.na(Petal.Width))),1,0),by=Species]
剛剛返回1組成的柱。在這裏,我沒有一個很好的解釋,爲什麼它不起作用。
我的目標是:
DT[,first_available:=0]
DT[c(11,71,135),first_available:=1]
但在現實中我有數百個組。任何幫助,將不勝感激!
編輯:this問題確實接近,但沒有針對NA的問題,如果我理解正確的話,並不能解決問題。我想:
DT <- data.table(DT, key = c('Species'))
DT[unique(DT[,key(DT), with = FALSE]), mult = 'first']
可能的複製Ø f [R:通過使用data.table和自聯接的組首次觀察](http://stackoverflow.com/questions/15776064/r-first-observation-by-group-using-data-table-self-join) – mtoto
請參閱編輯,我不確定 –