我有一个数据列表,其中包含一串包含货币代码的字符串。代码的位置在字符串中会有所不同,我正在寻找一种将代码分离出来的方法。
我尝试搜索,但是我能找到的所有建议都围绕在字符串的中心,该字符串位于相同位置或由相似字符(例如_或-)分隔
我的输入看起来像这样:
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))
我不知道我要去哪里看。谁能建议我要搜索的内容?
答案 0 :(得分:3)
一种选择是通过paste
将元素放入单个字符串中,基于'fx'的值提取子字符串
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))