首页 > 解决方案 > 查找字符串并创建附加列

问题描述

我有一个数据列表,其中包含一堆包含货币代码的字符串。代码的位置在字符串中有所不同,我正在寻找一种将代码分开的方法。

我尝试过搜索,但我能找到的所有建议都围绕字符串位于同一位置或由相似字符分隔(例如 _ 或 -)

我的输入看起来像这样:

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))

我不知道我会从哪里开始寻找。谁能建议我应该寻找什么?

标签: r

解决方案


一个选项是根据 '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))

推荐阅读