我有一个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) 我的问题与这个问题非常相似: 如何提取每个组的前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)