【发布时间】:2013-05-20 20:32:09
【问题描述】:
下面更新
:原创
我正在尝试根据匹配来自另一个数据帧的两列来找到最优雅(简单和简洁)的方法来替换某些列的值。
这是包含我希望替换的列的表(基于它们包含的值)。
> cost.table
Identifier Phase.0.Difficulty Phase.1.Complexity Phase.2.Complexity Phase.3.Complexity Phase.4.Complexity Phase.5.Complexity
1 FS1 Low Low Low Medium Medium High
2 FS2 High High High Medium Medium Medium
3 FS3 High Low Low High High High
4 FS4 High Medium Medium Medium Medium Medium
5 FS5 High Medium Medium High Medium Medium
Phase.6.Complexity Transaction.Feasibility Approach
1 High Medium B
2 Medium Medium I
3 High Medium B
4 Medium Medium I
5 Medium Medium B
这里是我希望用来查找正确替换值的查找表。
> cost.approach.difficulty
Approach Difficulty Phase 0 Phase 1 Phase 2 Phase 3 Phase 4 Phase 5 Phase 6
1 B High 18102.778 29481.67 29481.67 11822.222 30737.78 21634.67 12768.00
2 B Low 3860.694 15978.47 11175.69 7448.000 12768.00 11467.56 11467.56
3 B Medium 5323.694 24974.44 15184.17 9221.333 15368.89 12768.00 12768.00
4 I High 18102.778 74184.44 29481.67 44747.111 69160.00 45249.56 32245.11
5 I Low 3860.694 26008.89 11175.69 16551.111 35910.00 16876.22 14275.33
6 I Medium 5323.694 41156.11 15184.17 22373.556 44776.67 23378.44 16876.22
7 RV High 18102.778 28373.33 29481.67 44747.111 69160.00 45249.56 32245.11
8 RV Low 3860.694 14870.14 11175.69 16551.111 44776.67 16876.22 14275.33
9 RV Medium 5323.694 22757.78 15184.17 22373.556 44776.67 23378.44 16876.22
我正在尝试找到一个简单的解决方案来在 cost.approach.difficulty 表中查找“方法”和“难度”的相应值。
例如,在 cost.table 中,我希望将第一行 Phase.0.Difficulty 列替换为 3860.694(因为它是“B”方法且难度较低。
有没有人有一个优雅、简单的解决方案来查找基于两列(或更多列)的值并沿多列替换值?
谢谢,
安德鲁
更新 -
有两个与使用合并相关的建议答案。我的目标是找到一个更简洁、简洁、优雅的解决方案。这是迄今为止我想出的最好的:
cost.approach.difficulty$Phase.0[match(paste(cost.table$Approach, cost.table$Phase.0.Difficulty), paste(cost.approach.difficulty$Approach, cost.approach.difficulty$Difficulty))]
这个解决方案的问题是我需要提前知道列名,而且看起来仍然像一个 hack。谁有更简洁的解决方案?
【问题讨论】:
-
在
cost.approach.difficulty中使用空格的列名总是一个坏主意。可以用colnames(cost.approach.difficulty) <- make.names( colnames(cost.approach.difficulty) )修复它们吗? -
Beasterfield,我并不担心名称(这只是一个例子)——真正的问题是你如何逐行遍历多个列,并替换基于值的从另一个数据框中查找两列。
-
你真的应该担心这些名字。如果不出意外,具有格式奇怪的示例数据(名称或其他)会使这里的人使用该示例数据来帮助回答您的问题变得更加困难。
标签: r