web-dev-qa-db-ja.com

最初の2行を除くすべてを選択するためのR構文

たとえば、最初の2行以外をすべて選択するにはどうすればよいですか。 mtcarsデータセット?

行数がわかっていれば機能する_no_mazda <- mtcars[3:32]_を記述できることはわかっています。しかし、書き込む必要のある行数がわからない場合は、たとえばno_mazda <- mtcars[3:nrow(mtcars)]原因のどちらも機能しますが、次のようになります。

Rはmtcarsを2回含む式よりも優れた構文を提供しますか?

23

tailに負の値を指定してnを使用することをお勧めします。

tail(mtcars,-2)
22
Joshua Ulrich

負のインデックスは「スキップ」を意味します:

_mtcars[-(1:2)]
_

vectormtcarsの最初の2つのインデックスをスキップします。最初の10をスキップする必要がある場合は、mtcars[-(1:10)]を使用してください。

「データセット」について話していますが、使用するコードはベクター用であるため、mtcarsがベクターの場合も返答します。 mtcarsがデータフレームであり、行を選択している場合は、末尾にコンマを使用する必要があります。

_mtcars[-(1:2),]
_
33
TMS

data.table を使用している場合(そして、とにかくdata.frameを使用しているのに、なぜ誰もそれを使用しないのですか?)-便利な.N演算子( more info )、これは基本的にテーブルの行数を含みます。

これが実際の例です:

# make sure you have data.table
install.packages("data.table")
library(data.table)

# load the mtcars data
data(mtcars)
# Make a data table out of the mtcars dataset
cars <- as.data.table(mtcars, keep.rownames = TRUE)

# Take all the rows from a given index (e.g. 5) to the end
> cars[5:.N]
                     rn  mpg cyl  disp  hp drat    wt  qsec vs am gear carb
 1:   Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
 2:             Valiant 18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
 3:          Duster 360 14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
 4:           Merc 240D 24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2 

... (truncated)

OPの必要な出力を取得するには、その5を2に交換するだけです。

もちろん、これにより、常にlength()関数を使用する必要なく、さまざまな長さのテーブルを動的に使用できます。たとえば、常にテーブルの最後の5行を取得し、最後の行を削除する(出力として4行を取得する)必要があることがわかっている場合は、次のようにすることができます。

> cars[(.N-4):(.N-1)]    # note the expressions for slicing must be in parentheses
           rn  mpg cyl  disp  hp drat    wt qsec vs am gear carb
1:   Lotus Europa 30.4   4  95.1 113 3.77 1.513 16.9  1  1    5    2
2: Ford Pantera L 15.8   8 351.0 264 4.22 3.170 14.5  0  1    5    4
3:   Ferrari Dino 19.7   6 145.0 175 3.62 2.770 15.5  0  1    5    6
4:  Maserati Bora 15.0   8 301.0 335 3.54 3.570 14.6  0  1    5    8

または、常に最後の行を取得します。

cars[.N]

...これはPythonの同等物と同じように簡潔で簡潔です:cars[-1]

2
n1k31t4