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

问题描述:

我有一个数据集如下。 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))] 

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

我们需要的行索引随着列索引来提取数据集

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 
+0

如果我只是想匹配列5的元素:在最佳拟合值的8? – akaDrHouse

+1

@akaDrHouse您需要更改'names(ds)[5:8]'和'ds [5:8]' – akrun

+1

非常感谢,这太好了。我没有意识到没有任何逗号的[值]可以将行与列默认为列。我的理解是否正确? – akaDrHouse