我想为数据表中的每个因子选择前几行。
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
答案 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