(注意:这是家庭作业的一部分。我不是要求解决分配的问题,我只是对 R 中的一些行为感到困惑。)
我有一个数据集作为数据框加载到 R 脚本中。在箱线图中显示三个属性后,我发现三个属性中的两个存在异常值。分配的下一步是删除所有异常值。我已经编写了代码来执行此操作,但它只将它们从两个属性中的第一个中删除;该过程的第二个应用程序不会从数据框中删除任何其他记录。
我正在使用以下代码,改编自阅读此 R-bloggers 帖子:
# Get quantiles and IQR for each of the two attributes:
ar_quantiles <- quantile(leaf_data$aspect_ratio)
ar_iqr <- IQR(leaf_data$aspect_ratio)
s_quantiles <- quantile(leaf_data$solidity)
s_iqr <- IQR(leaf_data$solidity)
# Aspect Ratio cleanup.
leaf_data <- subset(
leaf_data,
leaf_data$aspect_ratio > (ar_quantiles[1] - 1.5 * ar_iqr) &
leaf_data$aspect_ratio < (ar_quantiles[2] + 1.5 * ar_iqr)
)
# Solidity cleanup.
leaf_data <- subset(
leaf_data,
leaf_data$solidity > (s_quantiles[1] - 1.5 * s_iqr) &
leaf_data$solidity < (s_quantiles[2] + 1.5 * s_iqr)
)
(博客文章中演示了一种不同的方法,但是当我切换到该方法时,它在aspect_ratio列中留下了一个异常值,并且仍然没有对列进行任何更改solidity。)
由于我对 R 的理解有限,我能够做的唯一真正的调试是转储boxplot(leaf_data$solidity, plot = FALSE)$out清理solidity列的行之前和之后的输出。但是该表达式返回的元素数量没有变化(元素本身也没有变化)。
这对任何人来说都是一个常见的错误/误解吗?