如何为数据表中的每个因子选择n个第一行?

时间:2016-05-29 02:40:41

标签: r data.table

我想为数据表中的每个因子选择前几行。

SOURCE=data.table(NAME=rep(paste0("NAME", as.character(1:3)), each=5), VALUE=sample(c(TRUE,FALSE), 5*3, TRUE) )
> SOURCE
     NAME VALUE
 1: NAME1  TRUE
 2: NAME1  TRUE
 3: NAME1  TRUE
 4: NAME1 FALSE
 5: NAME1 FALSE
 6: NAME2  TRUE
 7: NAME2 FALSE
 8: NAME2  TRUE
 9: NAME2  TRUE
10: NAME2  TRUE
11: NAME3  TRUE
12: NAME3 FALSE
13: NAME3 FALSE
14: NAME3  TRUE
15: NAME3  TRUE

例如,在这里我想为每个NAME选择3个第一行,所以我最终会得到行:1-3,6-9和11-13。知道怎么做吗?

我尝试了这个,但它不起作用:

> SOURCE[1:3, VALUE, by=NAME]
    NAME VALUE
1: NAME1  TRUE
2: NAME1  TRUE
3: NAME1  TRUE

2 个答案:

答案 0 :(得分:4)

我们可以尝试使用行索引(.I)以及子集。

SOURCE[SOURCE[, .I[1:3], by = NAME]$V1]

答案 1 :(得分:3)

这看起来应该这样做。与@ hrbrmstr在评论中回答的基本相同,但没有使用head函数:

set.seed(1)
SOURCE=data.table(NAME=rep(paste0("NAME", as.character(1:3)), each=5), VALUE=sample(c(TRUE,FALSE), 5*3, TRUE) )

SOURCE[,.SD[1:3], by=NAME]
    NAME VALUE
1: NAME1  TRUE
2: NAME1  TRUE
3: NAME1 FALSE
4: NAME2 FALSE
5: NAME2 FALSE
6: NAME2 FALSE
7: NAME3  TRUE
8: NAME3  TRUE
9: NAME3 FALSE