4

私は 16968 行のデータ フレームを持っています (正確さの理由は以下で明らかになります)。実行中の変数 (data$Ob) が実際にすべての行を順番にカウントしているかどうかを確認しています (最初の行 data$Ob は 1...最後の行 data$Ob は 16968 で、その間のすべての行について.

summary(data$Ob) を実行すると、最大値は 16968 ではなく 16970 であることがわかります。max(data$Ob) を実行すると、最大値は 16968 であり、summary の値ではありません。

for ループを実行して各観測値をチェックしたところ、max() 関数が正しく、data$Ob 変数が想定どおりに機能しているように見えます。しかし、集計関数が 2 ずれている理由を知っている人はいますか? 丸め誤差 (どういうわけか?) を想定していますが、このデータ チェックは、実行している分析にとって重要であり、間違っている場合、その後の分析はうまくいきません。

これが私が実行した for ループですが、この質問にとって重要ではないと思います。

checker <- vector(length=nrow(rd))
na.checker <- vector(length=nrow(rd))
    for (i in 1:nrow(rd)){
        checker[i] <- ifelse(i==rd$Ob[i], 1, 0)
        na.checker[i] <- ifelse(is.na(rd$Ob[i])==TRUE,0,1)
}
sum(checker)

ありがとう。

4

1 に答える 1

9

再現可能な例がないとわかりにくいですが、すべての FAQ の母のような匂いがします:デフォルトの表示精度は 4 桁なので、16968 は 16970 に丸められます。

編集:単純な例ではこれを再現できない ため、ここでサンプルデータが必要です:

R> set.seed(42) 
R> df <- data.frame(a=as.numeric(1:16968), b=16968:1, 
+                   c=rnorm(16968), d=runif(16968))
R> summary(df)
       a               b               c                  d           
 Min.   :    1   Min.   :    1   Min.   :-4.04328   Min.   :0.000101  
 1st Qu.: 4243   1st Qu.: 4243   1st Qu.:-0.68271   1st Qu.:0.252515  
 Median : 8484   Median : 8484   Median :-0.00528   Median :0.505090  
 Mean   : 8484   Mean   : 8484   Mean   :-0.00834   Mean   :0.504563  
 3rd Qu.:12726   3rd Qu.:12726   3rd Qu.: 0.66746   3rd Qu.:0.758991  
 Max.   :16968   Max.   :16968   Max.   : 4.32809   Max.   :0.999976  

編集 2、h/t を @ SimonO101 に:

R> summary(df$a)                                   ## what OP saw
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      1    4240    8480    8480   12700   17000 
R> summary(df$a, digits=6)                         ## what OP wanted to see
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      1    4243    8484    8484   12726   16968 
R> 
于 2013-05-04T21:41:02.070 に答える