data.table(.SD)的子集由两个变量组成

时间:2013-02-13 14:41:57

标签: r data.table

我正在尝试重写一段时间以来一直使用的功能。简化就是这样:

dat = data.table(dataframe) 

getRecentRow <- function(data) {
    #Get most recent row (with highest time)
    row = data[order(-Time)][1]
    return(row)     
    }

# Run getRecentRow on each chunk given an ID
output = dat[,getRecentRow(.SD), by=ID]

此功能为每个ID提供最新的条目(因此具有最高时间)。但是,对于每个ID,可以有多个条目。可以使用SUBID区分这些条目。我想深入挖掘一个级别,而不是每个ID获取最新的条目,我想要每个SUBID的最新条目。由于SUBID不是唯一的,因此还必须考虑ID。因此,我希望每个ID,每个SUBID最近的条目。

总结:getRecentRow()函数的输入不应按ID进行子集化,而应按ID和SUBID进行子集化。

我试过了:

dat = data.table(dataframe) 

    getRecentRow <- function(data) {
    #Get most recent row (with highest time)
    row = data[order(-Time)][1]
    return(row)     
    }

# Run getRecentRow on each chunk given an ID
output = dat[,getRecentRow(.SD), by=list(ID, SUBID)]

但是这会返回错误的输出,输出更多所需的行。这应该是一个简单的解决方案,我认为重新制定by=list(ID, SUBID),但我不知道如何。

1 个答案:

答案 0 :(得分:2)

问题不在于功能。这个功能实际上是在做它的工作。问题在于输入。 ID号有时会占用很大的值,导致分裂因某种原因失败。将此数字转换为字符后。问题解决了,功能很好。