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

Arrays 将变量值与列匹配以检索数据帧中的值,arrays,r,match,apply,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

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

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

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

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

ds$wanted如果我只想在bestfit中匹配第5:8列的值呢?@akaDrHouse那么你需要更改
names(ds)[5:8]
ds[5:8]
非常感谢,太好了。我没有意识到没有任何逗号分隔行和列的[value]默认为列。我的理解正确吗?@akaDrHouse是的,默认情况下,它给出data.frames中的列索引,但在矩阵中,它应该用
分隔,
@akaDrHouse
cbind
将行索引的
矩阵作为第一列,列索引作为第二列,并提取与该
矩阵的每一行中的索引对应的元素
 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