r - 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 之类的东西,所以我觉得我在这里遗漏了一些东西。似乎我正在走很长的路,并且已经有一些东西可以做到这一点。
解决方案
这是使用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
推荐阅读
- dns - 在没有重定向的情况下在 Cloudfront 中指定源路径
- reactjs - 如何在点击事件的下钻图中上传/设置动态(使用 axios)数据?
- javascript - 尝试在控制台中记录函数时未定义
- c# - EntityFramework 中的 SaveChanges() 不保存更改。显示“函数评估需要所有线程运行”
- c# - 如何将 Database First Entity Framework 4 升级到 6
- angular - 使用 :id 时无法匹配任何路由
- javascript - 调用 CanvasRenderingContext2D.fillText 时 Y 坐标定义什么?
- mysql - 如何在不关闭 groovy Sql 连接的情况下切换数据库
- c - 为什么我在 linux 和 OS/X 上得到不同的输出
- python - matplotlib:更改用 seaborn.heatmap 绘制的 ndim 直方图的轴刻度