4
我试图重写一段我一直在使用的函数。简化它是这样的:由两个变量data.table(.SD)的子集
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)
,但我不知道如何。
为什么'output = dat [,max(Time),by = ID]'在你的情况下工作?这也应该为您提供每个ID的最长时间。 – 2013-02-13 14:52:06
另外,如果你想获得行号而不是'Time'的最高值,你可以写'dat [,.I [which.max(Time)],by =“ID”]''。 – 2013-02-13 15:01:30
也许'dat [,.SD [which.max(Time)],by =“ID,SUBID”]'。 – 2013-02-13 15:06:56