标记组的第一个(或第n个)观察

时间:2020-10-21 21:47:27

标签: r data.table

我有以下数据:

DT = data.table(ID = c(1, 1, 2, 3, 3, 3), Y = c(2001, 2002, 1999, 2001, 2001, 2002))

DT
   ID  Y
1:  1 2001
2:  1 2002
3:  2 1999
4:  3 2001
5:  3 2001
6:  3 2002

数据集的唯一键为IDY。我想创建一个first的变量data.table,以DT ID Y first 1: 1 2001 1 2: 1 2002 0 3: 2 1999 1 4: 3 2001 1 5: 3 2001 1 6: 3 2002 0 的方式对组的第一次观察,如键所定义:

.I[1L]

我正在尝试对n做某事,但不知道。此外,一个额外的问题是为第n <个观测值创建这样的变量(假设所有组中SVGImageView svgIV; ...... String color = "#FEFBDE" svgIV.setCSS(String.format("* { fill:%s; }", color);); 个观察对象的最大数量)。谢谢大家!

2 个答案:

答案 0 :(得分:1)

也许您可以尝试head

DT[,first := +(Y==head(Y,1)), by = ID]

或更紧凑的产品(感谢@akrun)

DT[, first := +(Y == Y[1]), ID]

或更一般的一个(再次感谢@akrun)

library(dplyr)
DT[, first := +(Y %in% nth(Y, 1)), by = ID]

给出

> DT
   ID    Y first
1:  1 2001     1
2:  1 2002     0
3:  2 1999     1
4:  3 2001     1
5:  3 2001     1
6:  3 2002     0

答案 1 :(得分:0)

我们可以使用rleid

library(data.table)
n <- 1

DT[, first := as.integer(rleid(Y) == n), ID]

#   ID    Y first
#1:  1 2001     1
#2:  1 2002     0
#3:  2 1999     1
#4:  3 2001     1
#5:  3 2001     1
#6:  3 2002     0