使用任意行数删除数据框中的最后N行

时间:2014-01-15 21:22:14

标签: r dataframe row

我有一个数据框,我想从中删除最后N行。 如果我想删除5行,我目前使用以下命令,在我看来这是相当复杂的:

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

你如何完成任务,是否有一个方便的功能,我可以在R?

中使用

在unix中,我会使用:

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

4 个答案:

答案 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()示例可能会使用命名参数bylength.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)