将变量值与列匹配以检索数据框中的值

时间:2016-06-08 12:54:40

标签: arrays r match apply

我的数据集如下。 DS =

      hilldown_pod hillup_pod gnlsup_pod gnlsdown_pod      bestfit
1          NaN        NaN -2.8977432  -0.21143302         <NA>
2          NaN  0.1055303  0.1041875  -3.07497883   hillup_pod
3  -0.06537934        NaN        NaN  -0.06548488 hilldown_pod
4           NA -3.1700006 -3.0994209           NA   hillup_pod
5          NaN        NaN        NaN          NaN         <NA>

我想在excel中创建一个类似于hlookup的新列。对于每一行,我想在名称(ds)中搜索“bestfit”列中的值,并检索与该记录的匹配列名相关联的值。例如,最后一列如下:

  hilldown_pod hillup_pod gnlsup_pod gnlsdown_pod      bestfit      wanted
1          NaN        NaN -2.8977432  -0.21143302         <NA>          NA
2          NaN  0.1055303  0.1041875  -3.07497883   hillup_pod  0.10553030
3  -0.06537934        NaN        NaN  -0.06548488 hilldown_pod -0.06537934
4           NA -3.1700006 -3.0994209           NA   hillup_pod -3.17000060
5          NaN        NaN        NaN          NaN         <NA>          NA

我尝试了一些应用函数和匹配,但我的语法不正确。

 ds$wanted[which(ds[,(match(ds$bestfit,names(ds))] 

更复杂的是,这些数据只是列的一个子集,我只需匹配一个名称的子集。

1 个答案:

答案 0 :(得分:1)

我们需要行索引和列索引来从数据集中提取元素

ds$wanted <- ds[-5][cbind(1:nrow(ds), match(ds$bestfit, names(ds)[-5]))]
ds$wanted
 #[1]          NA  0.10553030 -0.06537934 -3.17000060          NA