#r #data.table
#r #данные.таблица
Вопрос:
У меня есть следующие данные:
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
, равную 1 для первого наблюдения группы, 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 <
максимальное количество obs. во всех группах). Спасибо вам всем!
Ответ №1:
Мы можем использовать 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
Ответ №2:
Может быть, вы можете попробовать 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. @akrun Спасибо! Да, это более компактно 🙂
2. @akrun Это более общее решение, еще раз спасибо!
3. Спасибо! Как бы вы выбрали группу, которая включает в себя более 1 переменной?
4. @vog Мы можем использовать
.(a,b,c)
, например5. Это не работает в моем df. Может ли это быть причиной того, что мои группирующие переменные являются символами?