R - 过滤数据框以仅包含列数符合条件的行

Nic*_*cko 3 r filter dataframe

假设这个数据框:

country <- c('USA', 'USA', 'USA', 'USA', 'USA', 'UK', 'UK', 'UK', 'Canada')
number <- c(1:9)
df <- data.frame(country, number)
Run Code Online (Sandbox Code Playgroud)

我希望能够仅对国家计数大于 4 或小于 2 的行进行子集化。因此,在这种情况下,它将返回:

country  number
USA      1
USA      2
USA      3
USA      4
USA      5
Canada   9
Run Code Online (Sandbox Code Playgroud)

我能够使它与这个一起工作:

totalcounts <- filter(count(df, country), n>4 | n<2) # giving me a df of the country and count
for (i in nrow(totalcounts)){
  # code in here that rbinds rows as it matches
}
Run Code Online (Sandbox Code Playgroud)

但我觉得必须有一个更简单的方法。我还没有掌握 sapply 之类的东西,所以我觉得我在这里错过了一些东西。似乎我要走了很长一段路,并且已经有一些东西可以做到这一点。

Tho*_*ing 7

这是使用subset+的基本 R 选项ave

subset(df,!ave(number,country,FUN = function(x) length(x)%in% c(2:4)))
Run Code Online (Sandbox Code Playgroud)

或更短的版本(感谢@Onyambu)

subset(df,!ave(number,country,FUN = length) %in% 2:4)
Run Code Online (Sandbox Code Playgroud)

以至于

  country number
1     USA      1
2     USA      2
3     USA      3
4     USA      4
5     USA      5
9  Canada      9
Run Code Online (Sandbox Code Playgroud)

  • 你知道你可以缩短这个 `subset(df,!ave(number,country,FUN = length) %in% 2:4)` (2认同)