r - 查找字符串并创建附加列
问题描述
我有一个数据列表,其中包含一堆包含货币代码的字符串。代码的位置在字符串中有所不同,我正在寻找一种将代码分开的方法。
我尝试过搜索,但我能找到的所有建议都围绕字符串位于同一位置或由相似字符分隔(例如 _ 或 -)
我的输入看起来像这样:
input = structure(list(V1 = c("asdf23.USD123", "DKK1234", "1dCNY_d",
"fgdUSD33", "912#NZD")), class = "data.frame", row.names = c(NA,
-5L))
我有一个我正在寻找的货币列表,如下所示:
fx = c("CNY", "DKK", "NZD", "USD")
我正在尝试在 V1 列中搜索与列表匹配的值,并使用相应的货币创建一个新列,例如:
output = structure(list(V1 = c("asdf23.USD123", "DKK1234", "1dCNY_d",
"fgdUSD33", "912#NZD"), V2 = c("USD", "DKK", "CNY", "USD", "NZD"
)), class = "data.frame", row.names = c(NA, -5L))
我不知道我会从哪里开始寻找。谁能建议我应该寻找什么?
解决方案
一个选项是根据 'fx' 的值提取子字符串,方法是paste
将元素放入单个字符串
library(dplyr)
library(stringr)
input %>%
mutate(V2 = str_extract(V1, str_c(fx, collapse="|")))
# V1 V2
#1 asdf23.USD123 USD
#2 DKK1234 DKK
#3 1dCNY_d CNY
#4 fgdUSD33 USD
#5 912#NZD NZD
或在base R
input$V2 <- regmatches(input$V1, regexpr(paste(fx, collapse="|"), input$V1))
推荐阅读
- angular - 在 IIS 上使用 Angular 部署 ASP.NET Core 应用程序
- java - 我是否应该始终在我的 WebClient 中明确加载 keyStore 以获取授权服务?
- laravel - 如何在 laravel 控制器的 foreach 中添加数组?
- postgresql - 在 postgresql 中转换信息
- node.js - 电子邮件数组验证 Adonis js
- java - 如何编写正则表达式以支持仅包含 - 和 / 特殊字符的字母数字字符串
- tensorflow - 理解 tensorflow lite schema 中的 SparsityParameters
- python - 我无法理解代码中计算的 FPR、TPR、阈值、ROC 值的含义(直觉)?
- python - Plotting series of images using matplot
- c# - How to get around the "Under Attack" mode from Cloudflare on websites using requests?