比较两个变量中的相应值

时间:2012-03-18 14:27:29

标签: r if-statement compare

我有一个包含两个数据集的数据集(嗯,实际上更多,但它们是无关紧要的)数字变量。我想将第二个变量中的值与第一个值中的(对应)值进行比较。第二个变量中的值应低于第一个变量中的值。如果不是这种情况,我希望在第三个变量中产生值'1'(错误),这表明比较是否成功(错误:是/否)

但是,两列中的值可能会有不同的小数位数。因此,应首先调整这些值(变量2中的每个值应与变量1中的相应值具有相同的小数位数)。为此,我使用了以下功能。

是否有方便的方法在R?

进行比较

数据示例:

var1  var2
0.06  0.060008314
0.01  0.007975829
0.03  0.034835578
0.03  0.032115433

2 个答案:

答案 0 :(得分:3)

喜欢这个吗?

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

答案 1 :(得分: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小于var1。

>     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