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

各列から異なる数の外れ値が削除され、列を 1 つのデータ フレームにまとめることができないため、このエラーが発生しました。

外れ値を NA に置き換えたい場合、1 つの解決策は次のようになります。

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 に答える