相关疑难解决方法(0)

如何提取每组前n行?

我有一个data.table dt.此data.table首先按列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
Run Code Online (Sandbox Code Playgroud)

我的问题是:我想知道是否可以为每个唯一日期提取前两行?或更一般地说:

如何提取每组中的前n行

在此示例中,结果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 …
Run Code Online (Sandbox Code Playgroud)

r data.table

27
推荐指数
2
解决办法
3498
查看次数

如何提取每个组的前n行并使用该子集计算函数?

我的问题与这个问题非常相似: 如何提取每个组的前n行?

dt
         date age     name       val
1: 2000-01-01   3   Andrew  93.73546
2: 2000-01-01   4      Ben 101.83643
3: 2000-01-01   5  Charlie  91.64371
4: 2000-01-02   6     Adam 115.95281
5: 2000-01-02   7      Bob 103.29508
6: 2000-01-02   8 Campbell  91.79532
Run Code Online (Sandbox Code Playgroud)

我们有一个dt,我添加了一个名为的额外列val。首先,我们要提取每个组中的前n行。提供的链接中的解决方案是:

dt[, .SD[1:2], by=date] # where 1:2 is the index needed
dt[dt[, .I[1:2], by = date]$V1] # for speed
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果该函数取决于子集信息,那么该如何将函数应用于每个组的前n行。我正在尝试应用这样的事情:

  # uses other columns for results/ is dependent on subsetted rows
  # but keep it simple for replication
do_something …
Run Code Online (Sandbox Code Playgroud)

r data.table

2
推荐指数
1
解决办法
69
查看次数

标签 统计

data.table ×2

r ×2