我相信肯定有一个简单的答案,但我仍在挣扎,一些研究并没有帮助我找到我想要的东西。假设我有一个命名向量;键";(技术(和";值";(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