4

しばらく使っていた関数を書き直そうとしています。簡略化すると、次のようになります。

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で区別できます。1レベル深く掘り下げたいので、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)私はその方法を見つけることができません。

4

1 に答える 1

2

機能に問題はありませんでした。関数は実際にはずっとその仕事をしていました。問題は入力にありました。ID番号が非常に大きな値になることがあり、何らかの理由で分割が失敗しました。この数値を文字に変換した後。問題は解決され、機能は素晴らしかった。

于 2013-02-14T08:41:58.913 に答える