R 在data.table中结合tail和by
通过因子获取data.table尾行的最佳方法是什么 假设我有:R 在data.table中结合tail和by,r,data.table,R,Data.table,通过因子获取data.table尾行的最佳方法是什么 假设我有: > dt <- data.table(category = c("A", "A", "B", "B", "B"), value = c(1,2,3,4,5)) > dt category value 1: A 1 2: A 2 3: B 3 4: B 4 5: B 5 我们可以使用last dt
> dt <- data.table(category = c("A", "A", "B", "B", "B"), value = c(1,2,3,4,5))
> dt
category value
1: A 1
2: A 2
3: B 3
4: B 4
5: B 5
我们可以使用
last
dt[,list(value=last(value)) , by = category]
# category value
#1: A 2
#2: B 5
如果有很多列
dt[, lapply(.SD, last), category]
如果数据按“类别”排序,则为另一选项
dt[!duplicated(category, fromLast=TRUE)]
# category value
#1: A 2
#2: B 5
或者像@Frank提到的那样
unique(dt, by="category", fromLast=TRUE)
或者我们可以直接在.SD
上使用last
(如评论中提到的@jangorecki)
dplyr
中还有另一个last
函数。因此,如果两个包都已加载,则最好指定data.table::last
,这样它就不会被屏蔽。dt[,lapply(.SD,tail,1),by=category]
也dt[,value[.N],by=category]
,以防有更多的列要返回,即不仅仅是value
列+任何分组列,您可以使用dt[dt[,max(.I),by=category]$V1]
,这将非常有用efficient@Frank谢谢,没有检查unique
是否也有fromLast
参数。那么dt[,last(.SD),category]
呢?乍一看也应该是有效的。
unique(dt, by="category", fromLast=TRUE)
dt[, last(.SD), category]