2013-12-17 58 views
4

我有以下數據框,將其稱爲df,它是由三個向量組成的數據框:「名稱」,「年齡」和「ZipCode」。如果條目出現少於x次,則刪除數據框中的行

df=  
    Name Age ZipCode 
1 Joe 16 60559 
2 Jim 20 60637 
3 Bob 64 94127 
4 Joe 23 94122 
5 Bob 45 25462 

我想如果在它的Name出現在數據幀少於2倍作爲一個整體(和靈活3,4,或x次),以刪除的df整個行。在數據框中基本保留BobJoe,但刪除Jim。我怎樣才能做到這一點?

我試圖把它變成一個表:

> table(df$Name) 

Bob Jim Joe 
2 1 2 

但我不知道從哪裏裏去。

回答

5

您可以使用ave這樣的:

df[as.numeric(ave(df$Name, df$Name, FUN=length)) >= 2, ] 
# Name Age ZipCode 
# 1 Joe 16 60559 
# 3 Bob 64 94127 
# 4 Joe 23 94122 
# 5 Bob 45 25462 

這個回答假設df$Namecharacter載體,而不是一個factor載體。


您也可以繼續使用table如下:

x <- table(df$Name) 
df[df$Name %in% names(x[x >= 2]), ] 
# Name Age ZipCode 
# 1 Joe 16 60559 
# 3 Bob 64 94127 
# 4 Joe 23 94122 
# 5 Bob 45 25462 
+0

第一個作品,但第二個正是我一直在尋找。非常感謝! – Mon

+0

@Mlee,沒問題。你也可以探索「data.table」包,它可以讓你做這樣的事情:'library(data.table); DT < - data.table(df); DT [,count:= .N,by = Name] [count> = 2]'。 – A5C1D2H2I1M1N2O1R2T1

+3

...或更短的data.table版本,信用於@mnel - DT [,if(.N> = 2).SD,by = Name]' – thelatemail

相關問題