web-dev-qa-db-ja.com

任意の行数のデータフレームの最後のN行を削除する

データフレームがあり、最後のN行を削除したい。 5行を削除する場合は、現在次のコマンドを使用しますが、これはかなり複雑です。

df<- df[-seq(nrow(df),nrow(df)-4),]

Rで使用できる便利な機能はありますか?

UNIXでは、次を使用します。

tac file | sed '1,5d' | tac 
34
Alby

headインデックスが負の場合、これに便利です...

_df <- data.frame( a = 1:10 )
head(df,-5)
#  a
#1 1
#2 2
#3 3
#4 4
#5 5
_

追伸このseq()のように、名前付き引数byおよび_length.out_(lenに短縮)を使用すると、-seq(nrow(df),by=-1,len=5)の例は少し不便に書かれます。

61
Simon O'Hanlon

これはもう1行必要ですが、はるかに読みやすくなっています。

n<-dim(df)[1]
df<-df[1:(n-5),]

もちろん、dimコマンドを再割り当てステートメントに直接貼り付けることにより、1行で実行できます。これは再現可能なスクリプトの一部であり、手順をたどることができると思います...それ以外の場合は、そのような場合は別の変数(たとえば、df2)に保存してから、冗長コピーを削除することを強くお勧めします'あなたが望むものを得たことを確認してください。

14
Assaf

完全を期すためにdplyr回答を追加する:

test_df <- data_frame(a = c(1,2,3,4,5,6,7,8,9,10), 
                      b = c("a","b","c","d","e","f","g","h","i","j"))
slice(test_df, 1:(n()-5))

## A tibble: 5 x 2
#      a b    
#  <dbl> <chr>
#1     1 a    
#2     2 b    
#3     3 c    
#4     4 d    
#5     5 e    
6
Oscar