根据现有列和一组参数在R数据框中创建新列

时间:2017-09-26 11:59:00

标签: r dataframe character lookup

我有以下数据框 - 称之为A

S.No    Action Taken
1   Advance Booking
2   Before Launch
3   After Launch
4   Re Launch
5   Customer care management

我还有以下数据框 - 称之为B

Sl No   Action Name
1       Machine Re Launch
2       New Machine Re Launch
3       New Machine Relaunch
4       New Device Launch
5       New Device After Launch
6       Customer Care Management'
7       Machine After Launch
8       New   Machine After Launch
9       New   Machine Relaunch
10      New   Device After Launch

如何在数据集B中创建列,如下所示 -

 Sl No  Action Name                Action Type
1       Machine Re Launch           Re Launch
2       New Machine Re Launch       Re Launch
3       New Machine Relaunch        Re Launch
4       New Device Launch           Launch
5       New Device After Launch     After Launch
6       Customer Care Management'   Customer Care Management
7       Machine After Launch        After Launch 
8       New   Machine After Launch  After Launch
9       New   Machine Relaunch      After Launch
10      New   Device After Launch   After Launch

我如何做到这一点。它类似于在Excel中查找。

1 个答案:

答案 0 :(得分:0)

是否由于您的示例中的拼写错误,B数据帧将其称为“重新启动”,但A表示“重新启动”?我没有看到你如何期望它与那两个没有任何进一步信息相匹配。

假设这是一个错误,你可以做这样的事情,

std::promise<void>

这只是遍历Actions Taken列表,查看它是否在Action Name中找到文本,如果是,则将其输出为Action Type(如果没有,则将其保留为空并移至下一个字符串) 。这只能找到确切的拼写(忽略大小写),所以“重新启动”和“重新启动”不匹配。

修改

添加新回复以反映下面的评论。

如果您希望能够处理所有版本的“重新启动”/“重新启动”等,我认为您必须制作一个包含您所期望的所有变体的查找表,其中包含相应的正确“采取行动”第二栏。

因此A数据框现在同时包含 action_text_variation 列和 action_taken ,其中 action_text_variation 包含要查找的所有文本, action_taken 具有您要用“。

”填充“action_type”的相应文本

现在我们遍历A中的行数。

B$action_type <- ""
for (i in A$action_taken) {
  B$action_type <- ifelse(B$action_type == "",
                                      ifelse(grepl(i,
                                                  B$action_name, 
                                                  ignore.case = TRUE),
                                             i,
                                             ""),
                                      B$action_type)
}

P.S。如果您发布了一个可重现的示例,那么我们可以自行运行代码并建议更改。