我有一个数据框,我想从中删除最后N行。 如果我想删除5行,我目前使用以下命令,在我看来这是相当复杂的:
df<- df[-seq(nrow(df),nrow(df)-4),]
你如何完成任务,是否有一个方便的功能,我可以在R?
中使用在unix中,我会使用:
tac file | sed '1,5d' | tac
答案 0 :(得分:56)
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)
)稍微少写(?)。
答案 1 :(得分:14)
这一行需要多一行,但更具可读性:
n<-dim(df)[1]
df<-df[1:(n-5),]
当然,您可以通过将dim
命令直接粘贴到重新赋值语句中来完成一行。
我认为这是可重现脚本的一部分,您可以回溯您的步骤...否则,强烈建议在这种情况下保存到不同的变量(例如,df2
),然后仅在您&之后删除冗余副本#39;确定你得到了你想要的东西。
答案 2 :(得分:4)
添加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
答案 3 :(得分:1)
另一个dplyr
答案更加可读:
df %>% filter(row_number() <= n()-5)