2

我有一个数据框 1488 obs。和400 var。我正在尝试记录表中的所有值,然后通过命令 rm.outlier 使用包异常值,我很想删除异常值。唯一的问题是我收到此错误:

Error in data.frame(V1 = c(-0.886056647693163, -0.677780705266081, -1.15490195998574,  : arguments imply differing number of rows: 1487, 1480, 1481, 1475, 1479, 1478, 1483, 1485, 1484, 1477, 1482, 1469

这是我的代码:

datalog <- matrix(0,nrow(data),ncol(data))
datalog[,] <- apply(data,2,log10)
datalog[datalog==-Inf] <- 0
datalog <- as.data.frame(datalog, stringsAsFactors=F)

testNoOutliers <- rm.outlier(datalog, fill = FALSE, 
                         median = FALSE, opposite = FALSE)

我的数据: https ://skydrive.live.com/redir?resid=CEC7696F3B5BFBC6!341&authkey=!APiwy6qasD3-yGo

谢谢你的帮助

4

2 回答 2

1

您收到错误是因为您没有相同数量的异常值条形变量。

要纠正它,您有 2 个选项:

  1. 放置选项fill = TRUE:放置平均值而不是异常值并且不删除

  2. 自己删除 oulier:

      # get a list of outlier index for each variable
      ll <- apply(datalog,2,function(x) which(x == outlier(x)))
    
于 2012-12-03T17:08:49.373 回答
0

您收到此错误是因为从每列中删除了不同数量的异常值,因此无法将列放在一个数据框中。

如果您想用 NA 替换异常值,一种解决方案是

out.rem<-function(x) {
  x[which(x==outlier(x))]=NA
  x
}

apply(datalog,2,out.rem)

要删除包含异常值的整行,您可以向@agstudy 解决方案添加额外的行

ll <- apply(datalog,2,function(x) which(x == outlier(x)))
new.datalog <- datalog[-unique(unlist(ll)),]
于 2012-12-03T15:12:27.207 回答