利用可能な観測の間に欠けている私の(大)data.table
のすべてのケースを含む出力を探しています。R:(年)data.tableのアドレスデータギャップ
DT <- data.table(country=c(rep("DE",10),rep("AT",10)),time=rep(2001:2010,2), value=rnorm(20))
DT[country=="DE" &time %in% c(2001,2005,2006),"value"] <- NA
DT[country=="AT" &time %in% c(2003,2008,2009,2010),"value"] <- NA
私は私が2003
にのみDE
2005
& 2006
とAT
中でdata.table
を作成することを可能にする機能を書きたいです。 this上の建物は、私はほとんどが午前、一つの国のためには、次のようになります。
test <-DT[country=="DE"]
range <- range(test[!is.na(value),time])
sequence <- seq(range[1],range[2])
sequence[!sequence %in% test[!is.na(value),time]]
そして今、私はdata.table
のby
オプションでcountry
渡って使用するには、この外の機能を作りたいです。ここに私の非稼働の例は次のとおりです。
#function to find datagaps (NA's) in a data.table (you still have to apply by group):
#x is the name of the column which specifies your frequency (such as year or date)
#y is the name of the column which has the NA's you're looking for
#data is a data.table
findgaps <- function(x,y,data){
range <- range(data[!is.na(y),x])
sequence <- seq(range[1],range[2])
return(sequence[!sequence %in% data[!is.na(y),x]])
}
DT[findgaps(time,year,DT),.(country,time,value),by=country)]
私の最高の推測では、関数が正しいフィルタ内でサブセットにdata.table
のための賢明な何かを、返さないということでしょうか?それはF、F、F、T、F、F、Fとなるはずです...何とか関数の出力としてベクトル?どんな助けもありがとう。
EDIT:所望の出力は次のようになります。最後に
output <- data.table(country=c("DE","DE","AT"), time=c(2005,2006,2003), value=c("NA","NA","NA"))
を私はintrapolationのように、これで何かをしたいです。したがって、具体的にはDT
の行に対処する方法は私にとっては問題ありません。おそらく、このような
ご希望の出力は何ですか?あなたはそれをdata.tableとして提供できますか? – lmo