我有数据.表dt.这是数据.表首先按第date列(我的分组变量)排序,然后按第age列排序:

library(data.table)
setkeyv(dt, c("date", "age")) # Sorts table first by column "date" then by "age"
> dt
         date age     name
1: 2000-01-01   3   Andrew
2: 2000-01-01   4      Ben
3: 2000-01-01   5  Charlie
4: 2000-01-02   6     Adam
5: 2000-01-02   7      Bob
6: 2000-01-02   8 Campbell

我的问题是:我想知道是否有可能 for each 唯一的日期提取前两行?或者更笼统地说:

How to extract the first n rows within each group?

在本例中,dt.f的结果为:

> dt.f = ???????? # function of dt to extract the first 2 rows per unique date
> dt.f
         date age   name
1: 2000-01-01   3 Andrew
2: 2000-01-01   4    Ben
3: 2000-01-02   6   Adam
4: 2000-01-02   7    Bob

p、 下面是创建上述数据的代码.表:

install.packages("data.table")
library(data.table)
date <- c("2000-01-01","2000-01-01","2000-01-01",
    "2000-01-02","2000-01-02","2000-01-02")
age <- c(3,4,5,6,7,8)
name <- c("Andrew","Ben","Charlie","Adam","Bob","Campbell")
dt <- data.table(date, age, name)
setkeyv(dt,c("date","age")) # Sorts table first by column "date" then by "age"

推荐答案

是的,只需使用.SD并根据需要编制索引即可.

  DT[, .SD[1:2], by=date]

           date age   name
  1: 2000-01-01   3 Andrew
  2: 2000-01-01   4    Ben
  3: 2000-01-02   6   Adam
  4: 2000-01-02   7    Bob

根据@eddi的建议进行编辑.

@埃迪的建议恰到好处:

为了提高速度,请使用此选项:

  DT[DT[, .I[1:2], by = date]$V1]

  # using a slightly larger data set
  > microbenchmark(SDstyle=DT[, .SD[1:2], by=date], IStyle=DT[DT[, .I[1:2], by = date]$V1], times=200L)
  Unit: milliseconds
      expr       min        lq    median        uq      max neval
   SDstyle 13.567070 16.224797 22.170302 24.239881 88.26719   200
    IStyle  1.675185  2.018773  2.168818  2.269292 11.31072   200

R相关问答推荐

R:如何在没有for循环的情况下替换多边形几何中的值?

使用long()在dØr中过滤后获取元素数量

R kableExtra在插入水平线时添加额外的空白行

在水平条形图中zoom x_轴

R -模运算后的加法

基于R中的GPS点用方向箭头替换点

从多个前置日期中获取最长日期

然后根据不同的列值有条件地执行函数

在R中使用数据集名称

使用Facet_WRAP时更改框图中线的 colored颜色

将重复项转换为NA

ComplexHEAT:使用COLUMN_SPLIT时忽略COLUMN_ORDER

当我添加美学时,geom_point未对齐

Geom_Hline将不会出现,而它以前出现了

'使用`purrr::pwalk`从嵌套的嵌套框架中的列表列保存ggplots时出现未使用的参数错误

`-`是否也用于数据帧,有时使用引用调用?

网络抓取新闻标题和时间

我需要使用ggplot2制作堆叠条形图

随机将数据帧中特定列上的某些行设置为NA

变异以按组从其他列创建具有最大和最小值的新列