J'ai un bloc de données et je veux en supprimer les N dernières lignes. Si je veux supprimer 5 lignes, j'utilise actuellement la commande suivante, qui à mon avis est plutôt compliquée:
df<- df[-seq(nrow(df),nrow(df)-4),]
Comment pourriez-vous accomplir la tâche, existe-t-il une fonction pratique que je peux utiliser dans R?
Sous Unix, j'utiliserais:
tac file | sed '1,5d' | tac
head
avec un indice négatif est pratique pour cela ...
df <- data.frame( a = 1:10 )
head(df,-5)
# a
#1 1
#2 2
#3 3
#4 4
#5 5
p.s. votre exemple seq()
peut être écrit légèrement moins (?) maladroitement en utilisant les arguments nommés by
et length.out
(raccourci à len
) comme ceci -seq(nrow(df),by=-1,len=5)
.
Celui-ci prend une ligne de plus, mais est beaucoup plus lisible:
n<-dim(df)[1]
df<-df[1:(n-5),]
Bien sûr, vous pouvez le faire sur une seule ligne en collant la commande dim
directement dans l'instruction de réaffectation. Je suppose que cela fait partie d'un script reproductible, et vous pouvez revenir sur vos étapes ... Sinon, nous vous recommandons fortement dans de tels cas d'enregistrer dans une autre variable (par exemple, df2
), puis supprimez la copie redondante uniquement lorsque vous êtes sûr d'avoir obtenu ce que vous vouliez.
Ajout d'une réponse dplyr
pour être complet:
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