检查存储在data.table中的参差不齐的面板中是否缺少项目

时间:2011-12-13 22:40:52

标签: r data.table

我有一个大数据集

 dim(dt)
 [1] 422096    162

其中dt是一个密钥为tic的data.table。我正在尝试为每组记录我有多少缺失的条目。这些组是时间序列,dt包含一个date列,它是一个R日期,一个book_lev列,我感兴趣的变量。

到目前为止,这是我的代码:

dt <- dt[sumdt]
sumdt <- dt[ ,list(min.date=min(date), max.date=max(date)), by="tic"]

sublengths <- dt[,list(tslen=length(date)),by=tic, mult="last"]
bt2 <- dt[sublengths, mult="first"]
bt2[, max.year:=extractyear(max.date)]
bt2[, min.year:=extractyear(min.date)]
bt2[, data.fullness:=tslen/(max.year - min.year + 1)]

dt <- dt[bt2]

我的想法是我创建了这个data.fullness值,如果时间序列中没有空洞,则该值应该等于1。我意识到我的book_lev栏中可能有一些NA,所以我想进一步限制。另外,一般来说,我是data.tables的新手,我想看看是否有更好的方法来编写我刚才写的内容。

您可以使用R的load命令加载一小部分数据,可在此处找到:http://econsteve.com/r/dt_sample.Robj

2 个答案:

答案 0 :(得分:1)

如果您有一个矩形数据框并希望限制完成观察,您可以创建一个布尔值向量,用complete.cases函数指示完全观察到的数据行。这假设您已使用R NA清除了数据和缺失值的一致格式。

此布尔矢量可用于直接对值进行子集化,或使用subset函数。

我不清楚您的问题描述或示例代码如何格式化dt对象,但您可能需要使用某些循环组合来成功获取数据的二维切片,其中complete.cases可以应用

答案 1 :(得分:1)

(首先,请注意。我不确定我是否正确理解了您希望data.fullness变量总结的内容。根据您链接到的数据集,我将其视为比例有一些数据的年份,从第一个测量年份到最后一个测量年份的间隔。)

以下是我了解问题的方法:

## FIRST, DEFINE A COUPLE OF FUNCTIONS

extractYear <- function(X) {
    as.numeric(format(as.Date(X, format="%m/%d/%Y"), "%Y"))
}

calcFullness <- function(YRS) {
    length(unique(YRS))/(diff(range(YRS))+1)
}

## THEN SET TO WORK ON YOUR DATA.TABLE

key(dt) <- "tic"
dt[, year:=extractYear(datadate)]

# Extract summaries for each level of tic
ticSumm <- 
    dt[, list(min.year = min(year),
              max.year = max(year),
              data.fullness = calcFullness(year)), by=tic]
ticSumm
#       tic min.year max.year data.fullness
# [1,] AMZN     1995     2010             1
# [2,]   GM     1950     2010             1
# [3,]  XOM     1950     2010             1


# Merge summary back into dt
dt <- dt[ticSumm]