如果这是重复的,请原谅,我真的不知道我想要实现的正确术语。
我有一个药品实验室结果的数据框如下:
╔══════╦════════╗ ║ 药品 ║ 结果 ║ ╠══════╬════════╣ ║ A ║ 10 ║ ║ B ║ 150 ║ ║ B ║ 50 ║ ║ A ║ 14 ║ ║ C ║ 3 ║ ║ C ║ 7 ║ ╚══════╩════════╝
对于每种药品,我正在使用dplyr来去除离群值(大于平均值4个标准差):
cleaned <- data %>% group_by(drug) %>% filter(abs(result-mean(result))/sd(result) < 4)
现在我想知道每种药物移除了多少异常值,因此我想生成一个类似以下的数据框:
╔══════╦═══════════╦══════════╦════════════╗ ║ 药物 ║ 总数 (N) ║ 异常值 ║ % 异常值 ║ ╠══════╬═══════════╬══════════╬════════════╣ ║ A ║ 100 ║ 7 ║ 0.07 ║ ║ B ║ 200 ║ 45 ║ 0.225 ║ ║ C ║ 300 ║ 99 ║ 0.33 ║ ╚══════╩═══════════╩══════════╩════════════╝最好的方法是什么?
isnorm <- function(x) { sum(abs(x-mean(x))/sd(x) < 4) }
summarize(data %>% group_by(drug), N=n(), normal=isnorm(test), outliers=N-normal, out_pct=outliers/N)
- Alexander Daviddata %>% group_by(drug) %>% summarise(...)
这样。 - Frank