2012-04-11 22 views
4

私はdata.tableをRに入れて、最初と最後のn行を捨てたい。私はいくつかのフィルタリングを適用してから、結果を切り捨てたいと思っています。最初と最後のn行を取り除く

example=data.table(row1=seq(1,1000,1),row2=seq(2, 3000,3)) 
e2=example[row1%%2==0] 
e2[100:(nrow(e2)-100)] 

これは1行で行う可能性はありますか?

example[row1%%2==0][100:-100] 

これはもちろん動作しませんが、追加の変数を必要としない簡単なソリューションはありますか?

+1

'e2 [100:length(e2)-100]'行をテストしましたか?私は、 'length'ではなく' nrow'を意味すると思っています( 'length(DT)'は列の数です)。 '--'より優先度が高いため、括弧も必要です。質問と回答を編集します... –

+0

あなたは正しいです、私の例は私が意図したものを返さなかった。 – theomega

答えて

2

を使用していない、このバージョンを追加しました1つの列の名前(row1)があるので、length(<any column>)を使用すると、名前のないテンポラリ内の行数が返されますdata.table

example=data.table(row1=seq(1,1000,1),row2=seq(2, 3000,3)) 

e2=example[row1%%2==0] 
ans1 = e2[100:(nrow(e2)-100)] 

ans2 = example[row1%%2==0][100:(length(row1)-100)] 

identical(ans1,ans2) 
[1] TRUE 
3
example=data.table(row1=seq(1,1000,1),row2=seq(2, 3000,3)) 
n = 5 
str(example[!rownames(example) %in% 
       c(head(rownames(example), n), tail(rownames(example), n)), ]) 
Classes ‘data.table’ and 'data.frame': 990 obs. of 2 variables: 
$ row1: num 6 7 8 9 10 11 12 13 14 15 ... 
$ row2: num 17 20 23 26 29 32 35 38 41 44 ... 
- attr(*, ".internal.selfref")=<externalptr> 

は、選択基準

str( 
    (res <- example[row1 %% 2 == 0])[ n:(nrow(res)-n), ] 
    ) 
Classes ‘data.table’ and 'data.frame': 491 obs. of 2 variables: 
$ row1: num 10 12 14 16 18 20 22 24 26 28 ... 
$ row2: num 29 35 41 47 53 59 65 71 77 83 ... 
- attr(*, ".internal.selfref")=<externalptr> 

でワンライナーのバージョンを加え、さらにあなたが知っているこの場合、中間という名前の値

str( 
example[row1 %% 2 == 0][n:(sum(row1 %% 2==0)-n), ] 
    ) 
Classes ‘data.table’ and 'data.frame': 491 obs. of 2 variables: 
$ row1: num 10 12 14 16 18 20 22 24 26 28 ... 
$ row2: num 29 35 41 47 53 59 65 71 77 83 ... 
- attr(*, ".internal.selfref")=<externalptr> 
関連する問題