簡體   English   中英

將所有行細分為組中負值之前

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM