如果条目少于x次,则删除数据框中的行

Mon*_*Mon 5 r duplicate-removal delete-row dataframe

我有以下数据框,称之为df,这是一个由三个向量组成的数据框:"Name","Age"和"ZipCode".

df=      
  Name Age ZipCode
1  Joe  16   60559
2  Jim  20   60637
3  Bob  64   94127
4  Joe  23   94122
5  Bob  45   25462
Run Code Online (Sandbox Code Playgroud)

我希望删除整个行,df如果Name它在整个数据框中出现少于2次(并且灵活地为3倍,4倍或x倍).基本上保持BobJoe在数据帧,但删除Jim.我怎样才能做到这一点?

我试着把它变成一张桌子:

> table(df$Name)

Bob Jim Joe 
 2   1   2 
Run Code Online (Sandbox Code Playgroud)

但我不知道从那里去哪里.

A5C*_*2T1 6

你可以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
Run Code Online (Sandbox Code Playgroud)

这个答案假定它df$Name是一个character向量,而不是一个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
Run Code Online (Sandbox Code Playgroud)

  • ...或更短的data.table版本,归功于@mnel - `DT [,if(.N> = 2).SD,by = Name] (3认同)