我有以下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
我怎么能这样做呢?谢谢你的帮助。
答案 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区域,你可以取出=
部分的不等式。