2016-05-29 8 views
2

データテーブル内の各要素の最初の数行を選択したいと思います。例えばデータテーブル内の各要素に最初のn個の行を選択するにはどうすればよいですか?

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 
+3

'SOURCE [、head(.SD、3)、by = NAME]'? (また: 'set.seed()'は再現性のためにあなたの友人です) – hrbrmstr

+0

もう一つのdupeターゲット:http://stackoverflow.com/q/16325641/ – Frank

答えて

3

それはそれを行う必要がありますようにこれが見えます。私たちは、行のインデックス(.I)と同様にサブセットを試すことができます

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 
+1

それは価値があるため、 '.SD [int_vec]' 'head(.SD、n)'ではなく、https://github.com/Rdatatable/data.table/issues/735のようになります – Frank

4

:コメントで@ hrbrmstrの答えとして、基本的には同じことが、しかしhead機能を使用していません。

SOURCE[SOURCE[, .I[1:3], by = NAME]$V1] 
関連する問題