我有以下数据:
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
数据集的唯一键为ID
和Y
。我想创建一个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););
个观察对象的最大数量)。谢谢大家!
答案 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