我有一个数据框1488 obs。和400变种我试图记录表中的所有值,然后使用命令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
感谢您的帮助
答案 0 :(得分: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)),]
答案 1 :(得分:0)
您收到错误是因为您没有相同数量的离群值变量。
要纠正它,您有两个选择:
选项 fill = TRUE :放置平均值而不是异常值而不删除
自行删除oulier:
# get a list of outlier index for each variable
ll <- apply(datalog,2,function(x) which(x == outlier(x)))