R中用rosnerTest筛选异常值遇逻辑/双精度向量错误求解
获取Rosner检验中Outlier为TRUE的行号向量
下面提供几种正确的实现方法,并说明你之前代码的问题:
正确实现方法
1. Base R 原生方式
用subset同时筛选行和列
# 筛选Outlier为TRUE的行,仅保留Obs.Num列 outlier_rows_df <- subset(var.ros.test$all.stats, Outlier == TRUE, select = Obs.Num) # 转换为向量 outlier_rows_vec <- outlier_rows_df$Obs.Num
直接索引(更简洁)
outlier_rows_vec <- var.ros.test$all.stats[var.ros.test$all.stats$Outlier == TRUE, "Obs.Num"]
2. dplyr 管道方式
你之前的filter语法错误,管道会自动把前一步的数据集传入filter,无需重复指定:
library(dplyr) outlier_rows_vec <- var.ros.test$all.stats %>% filter(Outlier == TRUE) %>% # 仅保留Outlier为TRUE的行 pull(Obs.Num) # 直接提取Obs.Num列转为向量
你之前代码的问题说明
- 第一次使用
subset时,只指定了select参数来选择列,但没有添加行筛选条件,因此返回了所有行的Obs.Num。 - 后续
filter报错是因为:管道后重复传入了var.ros.test$all.stats(filter的第一个参数已经是管道传来的数据框);另外Outlier是逻辑类型,不需要用引号包裹TRUE,直接使用TRUE即可。
内容的提问来源于stack exchange,提问作者burphound
相关产品推荐
相关产品推荐

