如何将值与R中的参考表进行比较? [英] How to compare values with a reference table in R?

查看:33
本文介绍了如何将值与R中的参考表进行比较?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

ddf = read.csv(text="年龄,体重10,269,218,286,167,2011,24",标题=T)refdf = read.csv(text="年龄,下,上5、10、146、11、137、13、158、14、189、16、2110、17、2211、19、2512, 22, 29",标题=T)

我需要在 ddf 中有另一列名为结果"的列,它的值应为 -1,1 或 0,具体取决于 <= 较低、> = 较高或介于较低和之间的重量.对应年龄值的 refdf 上限.

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

ddf$result = ifelse(refdf[age<=lower,],-1, ifelse(refdf[age>=upper,],1,0))`[.data.frame`(refdf, age <= lower, ) 中的错误:找不到对象 'lower'

我怎样才能做到这一点?感谢您的帮助.

解决方案

您可以通过首先使用 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 区域内,您可以去掉不等式的 = 部分.

I have following 2 dataframes. The 'ddf' has age and wt values of group while 'refdf' is reference table for lower and upper limit of wt for different ages.

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)

I need to have another column called 'result' in ddf which should have a value of -1,1 or 0 depending on the wt being <= lower, >=upper or between lower & upper of refdf for the corresponding age value.

I tried following code but it does not work:

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

How can I accompalish this? Thanks for your help.

解决方案

You can assomplish this by first finding the correct category with match, then doing the comparisons and converting them to numeric values.

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

(I added in an underweight individual) You can take out the = part of the inequalities if you want weights on the boundaries to be in the OK zone.

这篇关于如何将值与R中的参考表进行比较?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆