将变量值与列匹配以检索数据框中的值
Matching variable value to column to retrieve value in data frame
我有一个数据集如下。 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。对于每一行,我想在 names(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
我有一个数据集如下。 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。对于每一行,我想在 names(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