基于R中的键/值对象(命名向量),将值属性到数据帧的每一行的最简单方法是什么



我相信肯定有一个简单的答案,但我仍在挣扎,一些研究并没有帮助我找到我想要的东西。假设我有一个命名向量;键";(技术(和";值";(values((也许这不是一个足够好的结构,我应该试着找到如何用其他包创建dictionary?(

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

然后,我想创建一个新列,该列检索数据帧的相应yield值。类似的东西:

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包(并将其应用于数据帧。。。

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

我认为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

相关内容