2016-05-11 5 views
0

私はRのスクリプトで新しいです、ここでは私の単純な問題 ファイルから一度のコマンドでトップ100とボトム100の値を抽出する方法です。トップ100とボトム100の値を抽出するR

top<- head(xdata, 100) 

bottom <- head(xdata, 100) 

が、私はのnがあなたの長さである場合は、それをこのように行うことができます...このように、単一のコマンドで

both <- head(xdata, 100) + head(xdata, 100) 

おかげ

+0

これがデータフレームの場合、 'rbind(head(xdata、100)、tail(xdata、100))'です。ベクトルの場合は 'rbind()'の代わりに 'c()'を使います。 – Gregor

+0

コンソールのトップ+ボトムn行だけを表示したい場合は、デフォルトで 'data.table'パッケージを使用することができます。例えば。 'print(xdata、topn = 100)' – lukeA

+0

ありがとうございましたGregorとLukeA ....... c(head(xdata、100)、tail(xdata、100))は動作しています.... – mona

答えて

4

をしたいですデータベクトル。

# Fake data 
n <- 10^6 
xdata <- runif(n) 

# Get first 100 and last 100 in vector 
v <- xdata[c(1:100, (n-99):n)] 

また、コメントで述べた誰かとしてtailを使用することができますが、私は上記したように、インデックスに、より効率的です。これを実証する:

# Load microbenchmark package to compare computation speed 
library(microbenchmark) 
library(microbenchmark) 
m <- microbenchmark("direct index" = xdata[c(1:100, (n-99):n)], 
      "head/tail" = c(head(xdata, 100), tail(xdata, 100))) 
print(m) 
#Unit: microseconds 
#  expr  min  lq  mean median uq  max  neval 
#direct index 2.814 3.028 3.54298 3.422 3.6950 16.255 100 
#head/tail  29.239 30.691 34.61539 31.628 33.0045 110.648 100 

私のマシンでは6.5倍高速です。

+0

、例えば10^6 – Bulat

+0

私はまだ索引付けからより良いパフォーマンスを得る。 'head'と' tail'を使った方がうまく動作する例を提供できれば、私はそれを見て好奇心が強いでしょう。 –

+1

それは私の問題ではありませんでした。 1000レコードのパフォーマンスについて心配する必要はありません。多くの場合、ソリューションは小さなサンプルではうまく動作しますが、ひどく規模が大きくなります。 – Bulat

関連する問題