在data.table中将tail与by结合起来

时间:2016-02-29 16:39:29

标签: 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

我想得到这个,但我不确定最有效的方法:

   category value
1:        A     2
2:        B     5

1 个答案:

答案 0 :(得分:4)

我们可以使用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)

或者我们可以直接在last上使用.SD(正如评论中提到的@jangorecki)

dt[, last(.SD), category]

last还有另一个dplyr函数。因此,如果两个软件包都已加载,最好指定data.table::last,以免它被屏蔽。