R 基于其他值查找值
我试图复制(我认为)在excel中做的一件相当琐碎的事情,那就是我不能在R。 我有一个包含几个调整因素的查找表,这些因素取决于性别和年龄。我将把它简化为几个类别R 基于其他值查找值,r,R,我试图复制(我认为)在excel中做的一件相当琐碎的事情,那就是我不能在R。 我有一个包含几个调整因素的查找表,这些因素取决于性别和年龄。我将把它简化为几个类别 +------+--------+--------+---------+---------+-------+-------+ | Code | M_0_15 | F_0_15 | M_16_30 | F_16_30 | M_30+ | F_30+ | | X1 | 0.1 | 0.2 | 0.4 | 0.5
+------+--------+--------+---------+---------+-------+-------+
| Code | M_0_15 | F_0_15 | M_16_30 | F_16_30 | M_30+ | F_30+ |
| X1 | 0.1 | 0.2 | 0.4 | 0.5 | 0.5 | 1 |
| X2 | 0.3 | 0.3 | 0.4 | 0.5 | 0.5 | 1 |
| X3 | 0.5 | 0.3 | 0.3 | 0.4 | 0.5 | 1 |
+------+--------+--------+---------+---------+-------+-------+
因此,在我的父数据集中(我要添加到的数据集中),我会有如下内容
+------+-----+-----+
| Code | Age | Sex |
| X2 | 16 | M |
| X2 | 30 | F |
| X1 | 60 | M |
+------+-----+-----+
我可以让excel输入vlookup代码X2,根据年龄是16岁,性别是M(我通过串联和额外查找实现了这一点),列引用是4(从左边开始计数)
新列中的vlookup公式(调整因子)应该返回一个因子0.4,我可以继续使用它。将其粘贴下来可以:
+------+-----+-----+-------------------+
| Code | Age | Sex | Adjustment_factor |
| X2 | 16 | M | 0.4 |
| X2 | 30 | F | 0.5 |
| X1 | 60 | M | 0.5 |
+------+-----+-----+-------------------+
我理解使用“合并”来“查找”整个范围的值,并创建更大的数据集(例如,将邮政编码与另一个地理区域进行匹配),但我无法理解这种“复合”查找
我认为我需要做的是迭代每个观察值(单元格,在excel中),并根据年龄=x,性别=y,然后调整代码=z,在新列中创建一个新值,但我正在绘制一个空白,其中包含诸如合并和匹配等函数 你可以试试这个。
年龄的一部分是使代码复杂化的原因
d2$Adjustment_factor= apply(d2,1,function(x){
ic = which(d1$Code==x[1]) # select code row
is = grep(x[3],names(d1)) # select sex cols
ia = ifelse(x[2]<16,2,ifelse(x[2]>30,6,4)) # select first age col
icol = intersect(is,ia:(ia+1)) # col is intersection of sex and age (ia:(ia+1) takes both cols)
d1[ic,icol]
})
> d2
Code Age Sex Adjustment_factor
1 X2 16 M 0.4
2 X2 30 F 0.5
3 X1 60 M 0.5
你可以试试这个。年龄的一部分是使代码复杂化的原因
d2$Adjustment_factor= apply(d2,1,function(x){
ic = which(d1$Code==x[1]) # select code row
is = grep(x[3],names(d1)) # select sex cols
ia = ifelse(x[2]<16,2,ifelse(x[2]>30,6,4)) # select first age col
icol = intersect(is,ia:(ia+1)) # col is intersection of sex and age (ia:(ia+1) takes both cols)
d1[ic,icol]
})
> d2
Code Age Sex Adjustment_factor
1 X2 16 M 0.4
2 X2 30 F 0.5
3 X1 60 M 0.5
非常感谢您的快速回复。我将不得不研究这个例子——对于excel中的一个简单函数来说,它似乎非常复杂。唯一让它复杂的是年龄
,因为它从前两个案例到最后一个案例(60+)在格式上有所不同。非常感谢您的快速回复。我将不得不研究这个例子——对于excel中的一个简单函数来说,它似乎非常复杂。唯一让它复杂的是年龄
,因为从前两个案例到最后一个案例(60+)的格式不同