我正在尝试重写一段时间以来一直使用的函数.简化它是这样的:
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)]
但是这会返回错误的输出,输出所需的更多行.它应该是一个简单的解决方案,我认为通过= list(ID,SUBID)重新制定,但我无法弄清楚如何.
最佳答案 问题不在于功能.这个功能实际上是在做它的工作.问题在于输入. ID号有时会占用很大的值,导致分裂因某种原因失败.将此数字转换为字符后.问题解决了,功能很好.