查找没有异常值的均值,然后将该值表示为NA值
{
lq<-quantile(churn.data.frame.2$avg6mou,probs = 0.25, na.rm = TRUE)
uq<-quantile(churn.data.frame.2$avg6mou,probs = 0.75, na.rm = TRUE)
step<-1.5*(uq-lq)
xyz<- churn.data.frame.2$avg6mou[!is.na(churn.data.frame.2$avg6mou)]
imputation.mean<-mean(xyz[(xyz>lq-step)&(xyz<step+uq)])
churn.data.frame.2$avg6mou[which(is.na(churn.data.frame.2$avg6mou))]<- imputation.mean
}
嘿伙计们我是R的新手,并且有点陷入将data.frame嵌入函数中。我写的上面的代码找到了一个没有异常值的特定变量(列)的平均值,并将这个平均值用于缺失值。
由于我要处理157个变量,我想将其嵌入到用户定义的函数中,然后在for循环中使用它。 我在编写访问data.frame的每一列的函数时遇到了麻烦,并实现了上述行为。
非常感谢有效解决方案的任何帮助/建议
答案 0 :(得分:2)
您指的是专栏churn.data.frame.2$avg6mou
。您也可以使用churn.data.frame.2[, "avg6mou"]
访问它。您也可以将churn.data.frame.2$avg6mou[!is.na(churn.data.frame.2$avg6mou)]
更改为churn.data.frame.2[!is.na(churn.data.frame.2$avg6mou), "avg6mou"]
等。
答案 1 :(得分:1)
您希望将相同的函数应用于数据框的所有157列,并返回带有每列的均值的向量? apply系列函数应该帮助你做到这一点,同时避免for循环。
您可以使用常规向量引用替换特定列(churn.data.frame.2$avg6mou
)。然后使用函数包装器。
这样的事情应该有效:
your_function <- function(a_vector){
lq<-quantile(a_vector,probs = 0.25, na.rm = TRUE)
uq<-quantile(a_vector,probs = 0.75, na.rm = TRUE)
step<-1.5*(uq-lq)
xyz<- a_vector[!is.na(a_vector)]
return(mean(xyz[(xyz>lq-step)&(xyz<step+uq)]))
}
然后,您可以使用apply函数将其应用于数据框:
your_col_means <- sapply(df,your_function)
如果您更喜欢结果列表,那么您应该使用lapply而不是sapply。