将所有变量嵌入R中的插补函数中

时间:2015-12-27 08:13:19

标签: r

查找没有异常值的均值,然后将该值表示为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的每一列的函数时遇到了麻烦,并实现了上述行为。

非常感谢有效解决方案的任何帮助/建议

2 个答案:

答案 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。