匹配变量值到列以检索数据框中的值
问题描述:
我有一个数据集如下。 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
如果我只是想匹配列5的元素:在最佳拟合值的8? – akaDrHouse
@akaDrHouse您需要更改'names(ds)[5:8]'和'ds [5:8]' – akrun
非常感谢,这太好了。我没有意识到没有任何逗号的[值]可以将行与列默认为列。我的理解是否正确? – akaDrHouse