[英]Subset all rows before negative value in group
我有data.table
X = data.table(x = c(1,1,1,1,1,2,2,2,2,2), y = c(3,2,1,-1,5,7,4,-2,3,5))
我只想對一組中高於負值的行進行子集化:
res = data.table(x = c(1,1,1,2,2), y = c(3,2,1,7,4)
從第一組的五個值中,我只想得到前三個,因為第四個為負,第二個組則相同。
這里有兩個選擇:
X[, .SD[seq_len(which.max(y<0)-1L)], by = x]
或者(也許更有效,因為它避免了.SD
):
X[ X[, .I[seq_len(which.max(y<0)-1L)], by = x]$V1 ]
我們可能還會做
X[, .SD[cummin(sign(y))>0], x]
# x y
#1: 1 3
#2: 1 2
#3: 1 1
#4: 2 7
#5: 2 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.