【发布时间】:2020-08-11 03:02:06
【问题描述】:
我有一个非常大的数据框,其中一列是捕获的鱼类。这是一个非常简短的示例:
ID = seq(1,50,1)
fishes = c("bass", "jack", "snapper")
common = sample(fishes, size = 50, replace = TRUE)
dat = as.data.frame(cbind(ID, common))
我想删除构成数据比例低于特定百分比的任何物种。对于此处的示例,假设我想删除构成数据不到 30% 的所有物种:
library(dplyr)
nrow(filter(dat, common == "bass")) #22 rows -> 22/50 -> 44%
nrow(filter(dat, common == "jack")) #12 rows -> 12/50 -> 24%
nrow(filter(dat, common == "snapper")) #16 rows -> 16/50 -> 32%
在这里,千斤顶占不到 30% 的行,所以我想删除所有带有千斤顶的行(或所有少于 15 行的物种)。这在这里很容易做到,但实际上我的数据框中有 700 多种鱼类,我想剔除占数据不到 1% 的所有物种(在我的情况下少于 18,003 行) .有没有一种简化的方法来做到这一点,而不必单独过滤掉每个物种?
我想可能是某种循环,如果 common name = "x" 的行数小于 18003,则删除这些行...
【问题讨论】:
标签: r if-statement filter