gpt4 book ai didi

r - 使用data.table标记组中的第一个(或最后一个)记录

转载 作者:行者123 更新时间:2023-12-03 11:38:54 25 4
gpt4 key购买 nike

给定一个排序键,是否存在data.table快捷方式来复制SAS和SPSS中的firstlast功能?

下面的行人进路标记出该组的第一条记录。

鉴于data.table的精致(我逐渐熟悉),我假设使用self join和mult的快捷方式,但我仍在尝试找出答案。

例子如下:

require(data.table)

set.seed(123)
n <- 17
DT <- data.table(x=sample(letters[1:3],n,replace=T),
y=sample(LETTERS[1:3],n,replace=T))
sortkey <- c("x","y")
setkeyv(DT,sortkey)
key <- paste(DT$x,DT$y,sep="-")
nw <- c( T , key[2:n]!=key[1:(n-1)] )
DT$first <- 1*nw
DT

最佳答案

这是使用data.table的几种解决方案:

## Option 1 (cleaner solution, added 2016-11-29)
uDT <- unique(DT)
DT[, c("first","last"):=0L]
DT[uDT, first:=1L, mult="first"]
DT[uDT, last:=1L, mult="last"]


## Option 2 (original answer, retained for posterity)
DT <- cbind(DT, first=0L, last=0L)
DT[DT[unique(DT),,mult="first", which=TRUE], first:=1L]
DT[DT[unique(DT),,mult="last", which=TRUE], last:=1L]

head(DT)
# x y first last
# [1,] a A 1 1
# [2,] a B 1 1
# [3,] a C 1 0
# [4,] a C 0 1
# [5,] b A 1 1
# [6,] b B 1 1

这些行中显然都有很多。但是,关键构造如下,该构造返回每个组中第一条记录的行索引:
DT[unique(DT),,mult="first", which=TRUE]
# [1] 1 2 3 5 6 7 11 13 15

关于r - 使用data.table标记组中的第一个(或最后一个)记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10474456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com