r - 基于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 包)并将其应用于数据框......
非常感谢,我希望这个例子足够清楚。
解决方案
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
推荐阅读
- python - 如何在 Windows 中获取 virtualenv 的路径?
- javascript - this.state 在 React 组件渲染函数中未定义
- javascript - 如何在 onSubmit 调用的函数中使用状态?
- flutter - 如何在 Flutter 的 AlertDialog 中实现 Slider?
- python - Python:使用 ffill() 将数据帧从每日数据上采样到每小时数据
- powerbi - Power BI Web 源无法通过网关更新
- php - 编辑 Twig 文件上的变量内容
- get - Angular7 httpclient获取调用无法将PDF解析为blob
- swagger - 使用 swagger codegen 获取“列表”时
' 而不是简单的 'byte[]' - c++ - 如何在多线程 MEX 函数中打印到控制台?