我有一个10个不同块的数据框,我想只占用每个块的前1500行。块由下面的ID列标识。这是一个浓缩版本来说明。
> mdf[1:15,1:4]
x.1 x.2 x.3 ID
1: 0.025061 0.0010093 0.0087476 1
2: 0.025044 0.0010191 0.0087674 1
3: 0.025023 0.0010280 0.0087716 2
4: 0.025000 0.0010360 0.0087602 2
5: 0.024974 0.0010433 0.0087334 2
6: 0.024944 0.0010497 0.0086911 2
7: 0.024912 0.0010553 0.0086335 2
8: 0.024877 0.0010602 0.0085607 3
9: 0.024839 0.0010643 0.0084728 3
10: 0.024798 0.0010677 0.0083699 3
11: 0.024753 0.0010703 0.0082521 3
12: 0.024706 0.0010723 0.0081197 3
13: 0.024656 0.0010735 0.0079726 4
14: 0.024603 0.0010740 0.0078112 4
15: 0.024546 0.0010739 0.0076356 4
我想要的是能够识别ID更改的行,然后保留接下来的1500行,在下一次ID更改之后丢弃所有内容。
我已尝试使用索引和for循环手动进行子集化,以找到值发生变化的地方,但我没有任何运气。这里的任何帮助都将非常感谢!!
答案 0 :(得分:1)
请找到两种解决方案,以获得所需的输出。
setDT(df)[, head(.SD, 2), by = ID]
OR
通过避免每个组的.SD,大数据集的有效方式。
setDT(df)[, indx := seq_len(.N), by = ID][indx <= 2][,!("indx"),with=F]