Arrays 将变量值与列匹配以检索数据帧中的值
我有一个如下的数据集。ds=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
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中的列索引,但在矩阵中,它应该用分隔,
@akaDrHousecbind
将行索引的矩阵作为第一列,列索引作为第二列,并提取与该矩阵的每一行中的索引对应的元素
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