我有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))
Run Code Online (Sandbox Code Playgroud)
我想仅在一个组中对仅在负值之上的行进行子集化:
res = data.table(x = c(1,1,1,2,2), y = c(3,2,1,7,4)
Run Code Online (Sandbox Code Playgroud)
从第一组中的五个值开始,我想只获得前三个,因为第四个是负数,而第二个组是相同的.
这有两个选择:
X[, .SD[seq_len(which.max(y<0)-1L)], by = x]
Run Code Online (Sandbox Code Playgroud)
或者(可能更有效,因为它避免了.SD):
X[ X[, .I[seq_len(which.max(y<0)-1L)], by = x]$V1 ]
Run Code Online (Sandbox Code Playgroud)