如何将值与R中的参考表进行比较?

时间:2014-05-29 04:28:39

标签: r merge

我有以下2个数据帧。 'ddf'具有组的年龄和wt值,而'refdf'是不同年龄的wt的下限和上限的参考表。

ddf =  read.csv(text="
                    age, wt
                    10,26
                    9,21
                    8,28
                    6,16
                    7,20
                    11,24",header=T)

refdf =  read.csv(text="
                    age,lower,upper
                    5, 10, 14
                    6, 11, 13
                    7, 13, 15
                    8, 14, 18
                    9, 16, 21
                    10, 17, 22
                    11, 19, 25
                    12, 22, 29",header=T)

我需要在ddf中使用另一个名为'result'的列,其值应为-1,1或0,具体取决于wt为< = lower,> = upper或lower& refdf的上限为相应的年龄值。

我尝试了以下代码,但它不起作用:

ddf$result = ifelse(refdf[age<=lower,],-1, ifelse(refdf[age>=upper,],1,0))
Error in `[.data.frame`(refdf, age <= lower, ) : object 'lower' not found

我怎么能这样做呢?谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

您可以首先使用match找到正确的类别,然后进行比较并将其转换为数值来完成此操作。

m <- match(ddf$age, refdf$age)
ddf$result <- (refdf$lower[m] > ddf$wt) *(-1) + 
    (ddf$wt > refdf$upper[m])*1

# 1  10 26      1
# 2   9 21      1
# 3   8 28      1
# 4   6 16      1
# 5   7 20      1
# 6  12 18     -1
# 7  11 24      0

(我在一个体重不足的人中加入)如果你想让边界上的权重在OK区域,你可以取出=部分的不等式。