首页 > 解决方案 > R - 过滤数据框以仅包含列数符合条件的行

问题描述

假设这个数据框:

country <- c('USA', 'USA', 'USA', 'USA', 'USA', 'UK', 'UK', 'UK', 'Canada')
number <- c(1:9)
df <- data.frame(country, number)

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

country  number
USA      1
USA      2
USA      3
USA      4
USA      5
Canada   9

我能够使它与此一起使用:

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
}

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

标签: rdataframefilter

解决方案


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

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

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

subset(df,!ave(number,country,FUN = length) %in% 2:4)

这样

  country number
1     USA      1
2     USA      2
3     USA      3
4     USA      4
5     USA      5
9  Canada      9

推荐阅读