2017-03-16 112 views
0

如何删除每个新变量的第一行?例如,这里有一些数据:根据列变量删除第一行

m <- c("a","a","a","a","a","b","b","b","b","b") 
n <- c('x','y','x','y','x','y',"x","y",'x',"y") 
o <- c(1:10) 

z <- data.frame(m,n,o) 

我想删除列m中的第一个条目和b。我有一个非常大的数据框,所以我想根据从a到b等的变化来做到这一点。

这是我想要的数据框的样子。

m n o 
1 a y 2 
2 a x 3 
3 a y 4 
4 a x 5 
5 b x 7 
6 b y 8 
7 b x 9 
8 b y 10 

谢谢。

+2

请参阅'?duplicated' - 即'duplicated(z $ m)'为您提供了一个可用于选择的逻辑向量。 – thelatemail

+0

我不知道我关注。条目不重复。 – phaser

回答

6

只需使用duplicated

z[duplicated(z$m),] 

# m n o 
#2 a y 2 
#3 a x 3 
#4 a y 4 
#5 a x 5 
#7 b x 7 
#8 b y 8 
#9 b x 9 
#10 b y 10 

为什么这个工程?考虑:

duplicated("a") 
#[1] FALSE 
duplicated(c("a","a")) 
#[1] FALSE TRUE 
+0

我不知道是谁,但这太棒了 –

4

data.table是R中较大数据集的首选。setDTz数据框转换为数据表以供参考。按m分组并删除第一行。

library('data.table') 
setDT(z)[, .SD[-1], by = "m"] 
+0

'z [,.I [-1],by = m] $ V1]'可能会更快 –

+0

@RichScriven - 没有'.SD [n]'优化一段时间? – thelatemail

+0

做过了吗?我可能错过了。 –

1

使用group_byrow_number从包装dplyr:

z %>% 
    group_by(m) %>% 
    filter(row_number(o)!=1)