2017-03-16 82 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)