Удалите последние N строк в кадре данных с произвольным количеством строк
У меня есть кадр данных, и я хочу удалить из него последние N строк.
Если я хочу удалить 5 строк, в настоящее время я использую следующую команду, которая, на мой взгляд, довольно запутана:
df<- df[-seq(nrow(df),nrow(df)-4),]
Как бы вы выполнили задачу, есть ли удобная функция, которую я могу использовать в R?
В unix я бы использовал:
tac file | sed '1,5d' | tac
Ответы
Ответ 1
head
с отрицательным индексом удобно для этого...
df <- data.frame( a = 1:10 )
head(df,-5)
# a
#1 1
#2 2
#3 3
#4 4
#5 5
p.s. ваш пример seq()
может быть написан немного меньше (?) неудобно, используя именованные аргументы by
и length.out
(сокращен до len
), как этот -seq(nrow(df),by=-1,len=5)
.
Ответ 2
Это займет еще одну строку, но гораздо читабельнее:
n<-dim(df)[1]
df<-df[1:(n-5),]
Конечно, вы можете сделать это в одной строке, вставив команду dim
непосредственно в оператор повторного присваивания.
Я предполагаю, что это часть воспроизводимого script, и вы можете повторить шаги... В противном случае настоятельно рекомендуется в таких случаях сохранять в другую переменную (например, df2
), а затем удалять избыточную копию только после того, как вы "Конечно, вы получили то, что хотели.