【发布时间】:2016-10-28 23:50:57
【问题描述】:
我需要在数据框中添加remove_outliers 函数返回的向量[属性]。现在,我得到了一个大矩阵。我试过追加方法(如下)
# function to calculate IQR and upper and lower limit of given attribute
remove_outliers <- function(attribute, na.rm = TRUE, ...) {
IQR_val <- quantile(attribute, probs=c(.25, .75), na.rm = na.rm, ...)
LF <- 1.5 * IQR(attribute, na.rm = na.rm)
attribute_W_NA <- attribute
attribute_W_NA[attribute < (IQR_val[1] - LF)] <- NA
attribute_W_NA[attribute > (IQR_val[2] + LF)] <- NA
attribute_W_NA
}
cleaned_data <- NULL
for(i in 1:ncol(data_rm_val)){
# cleaned data with NA entries replacing outliers
cleaned_data <- cbind(cleaned_data, remove_outliers(data_rm_val[,i]))
}
它会导致大矩阵
并且期望的结果应该是具有相同行数和列数的数据框。
任何帮助将不胜感激。 PS:我是 R 和数据科学的新手。
【问题讨论】:
-
对于循环尝试
cbind而不是append,尽管apply(data_rm_val, 2, remove_outliers)可能会更快更好地满足您的需求。 -
如果您要使用循环,请预先分配适当大小的对象,否则您将获得糟糕的性能。也就是说,有更好的方法可以在没有循环的情况下做到这一点。如果您在问题中添加一些数据,可能会有人发布。
-
好的。我会试试的。我也试过 cbind 。我有一个数据框(一个大矩阵)。
-
数据框不是你想要的结果吗?你在循环之后调用它。请显示当前和期望的结果。
标签: r dataframe data-science cbind