2012-03-18 13 views
2

私は2つのデータセットを持っていますが(実際ははるかに多いですが、無関係です)数値変数です。私は最初の値の(対応する)値に2番目の変数の値を比較したいと思います。 2番目の変数の値は、1番目の変数の値よりも低くなければなりません。これが当てはまらない場合は、比較が成功したかどうかを示す3番目の変数に値 '1'(エラー)を出力します(エラー:はい/いいえ)2つの変数の対応する値を比較する

ただし、両方の列が小数の数が異なる可能性があります。したがって、これらは最初に調整する必要があります(変数2の各値は、変数1の対応する値と同じ小数を持つ必要があります)。このため私は以下の関数を使用しました。

Rでこの比較を行う便利な方法はありますか?データの

例:このように

var1 var2 
0.06 0.060008314 
0.01 0.007975829 
0.03 0.034835578 
0.03 0.032115433 

答えて

2

dat = data.frame(x=runif(10), y=runif(10)) 
> dat 
      x   y 
1 0.54924947 0.26023483 
2 0.89064477 0.28528469 
3 0.87488691 0.18475596 
4 0.27606585 0.49777871 
5 0.19463634 0.59677062 
6 0.52419706 0.62171800 
7 0.44588382 0.55170973 
8 0.07009947 0.71273801 
9 0.25127679 0.24720947 
10 0.04094697 0.08151144 
> dat$error = ifelse(dat$y<dat$x,1,0) 
> dat 
      x   y error 
1 0.54924947 0.26023483  1 
2 0.89064477 0.28528469  1 
3 0.87488691 0.18475596  1 
4 0.27606585 0.49777871  0 
5 0.19463634 0.59677062  0 
6 0.52419706 0.62171800  0 
7 0.44588382 0.55170973  0 
8 0.07009947 0.71273801  0 
9 0.25127679 0.24720947  1 
10 0.04094697 0.08151144  0 
+0

ifelseは1または0をサブセットに割り当てるよりも遅くなると思う。 – GSee

1

編集:また、科学的表記法で表される数値で機能小数点以下カウント数字用更新方法(how to return number of decimal places in Rから借用)

# sample data 
x <- data.frame(var1 = c(0.06, 0.01, 0.03, 0.03), 
       var2 = c(0.060008314, 0.007975829, 0.034835578, 0.032115433)) 

x$var3 <- 0 # first set all var3 to zero 
# figure out how many digits after decimal in var1 
x$dec <- nchar(sub("^.+[.]", "", sub("0+$", "", as.character(x$var1))))  
# if var1 is <= rounded var2, set equal to 1 
x[x$var1 <= round(x$var2, x$dec), 'var3'] <- 1 

丸めた後、すべてのVAR1 == VAR2、そうなしvar2はvar 1より小さい。

>  x[, 1:3] 
    var1  var2 var3 
1 0.06 0.060008314 1 
2 0.01 0.007975829 1 
3 0.03 0.034835578 1 
4 0.03 0.032115433 1 
+0

ありがとう、これは間違いなく助けになる! – mats

関連する問題