查找字符串并创建其他列

时间:2019-07-05 05:13:05

标签: 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))

我不知道我要去哪里看。谁能建议我要搜索的内容?

1 个答案:

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