首页 > 解决方案 > 基于R中的键/值对象(命名向量)将值归因于数据帧的每一行的最简单方法是什么?

问题描述

我确信必须有一个简单的答案,但我仍然在苦苦挣扎,一些研究并没有帮助我找到我想要的东西。假设我有一些带有“键”(技术)和“值”(值)的命名向量(也许这不是一个足够好的结构,我应该尝试找到如何使用其他包创建字典?)

technology <- c("old", "medium", "modern")
yields <- c(0.7, 0.8, 0.9)
names(yields) <- technology
print(yields)

   old medium modern 
   0.7    0.8    0.9

现在我有一个数据框如下

tech <- c("old", "modern", "modern", "medium", "old")
consumption <-c(100, 230, 120, 80, 130)
df <- data.frame(tech, consumption)
print(df)

    tech consumption
1    old         100
2 modern         230
3 modern         120
4 medium          80
5    old         130

然后,我想创建一个新列,该列检索数据框的相应收益率值。与此类似的东西:

    tech consumption yield
1    old         100 0.7
2 modern         230 0.9
3 modern         120 0.9
4 medium          80 0.8
5    old         130 0.7

我知道我可以使用一些关节来做到这一点,但如果我有数千行,我不确定这是一种有效的方法。对于进行这种映射的最简单/最有效的方法,我真的很感激。我缺乏使用 R 语法的经验,无法简单地尝试随机创建一些字典(例如使用 dict 包)并将其应用于数据框......

非常感谢,我希望这个例子足够清楚。

标签: rdataframedictionarykey-value

解决方案


merge我认为关节将是最有效的。您可以将命名向量转换为数据框,然后merge

merge(df, stack(yields), by.x = 'tech', by.y = 'ind')

将它们保留为向量,您可以df通过按其名称对向量进行子集来添加新列。

df$yield <- yields[df$tech]
df
#    tech consumption yield
#1    old         100   0.7
#2 modern         230   0.9
#3 modern         120   0.9
#4 medium          80   0.8
#5    old         130   0.7

推荐阅读