我有一个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
请参阅编辑,我不确定 –