我的数据集如下。 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))]
更复杂的是,这些数据只是列的一个子集,我只需匹配一个名称的子集。
答案 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