3

我有一个大数据集

 dim(dt)
 [1] 422096    162

dt键为 的 data.table在哪里tic。我正在尝试为每组我有多少丢失的条目进行衡量。这些组是时间序列,并且 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

4

2 回答 2

1

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

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

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

于 2011-12-13T23:37:58.630 回答
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]
于 2011-12-16T02:44:30.563 回答