Regex R映射等价?
必须是避免在R中这样做的一种方法。某种映射函数?基本上,我们希望指定一系列grepl条件和一系列替换。谢谢Regex R映射等价?,regex,r,Regex,R,必须是避免在R中这样做的一种方法。某种映射函数?基本上,我们希望指定一系列grepl条件和一系列替换。谢谢 hold[grepl('TRAVEL', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "TRAVEL" hold[grepl('IN-KIND:', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "IN-KIND" hold[grepl('COMPLIANCE', hold[, "exp_pu
hold[grepl('TRAVEL', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "TRAVEL"
hold[grepl('IN-KIND:', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "IN-KIND"
hold[grepl('COMPLIANCE', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "COMPLIANCE"
hold[grepl('MEDIA', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "MEDIA"
hold[grepl('WATER|FOOD|OFFICE|Office|CLEANING|ALARM', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "OFFICE"
hold[grepl('DATA', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "DATA"
hold[grepl('LEGAL', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "LEGAL"
hold[grepl('EVENT', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "EVENT"
hold[grepl('CATERING', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "CATERING"
hold[grepl('PHONE', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "PHONE"
hold[grepl('EQUIPMENT', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "EQUIPMENT"
hold[grepl('FUNDRAISING|FINANCE', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "FUNDRAISING"
hold[grepl('PAYROLL', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "PAYROLL"
hold[grepl('LIST RENTAL', hold[, "exp_pur_desc"]), "exp_pur_desc"] <- "LIST RENTAL"
hold[grepl('TRAVEL',hold[,“exp\u pur\u desc”]),“exp\u pur\u desc”]这里有一种方法:
strReplace <- function(x, mapFrom, mapTo) {
for (i in seq_along(mapFrom)) {
x <- gsub(mapFrom[[i]], mapTo[[i]], x)
}
x
}
strReplace(c("Hello cruel world!", "Hello again Tellus!"), # Text
c("Hello", "world|Tellus"), # words to replace (regular expressions)
c("Hi", "moon")) # words to replace with
#[1] "Hi cruel moon!" "Hi again moon!"
strReplace这里有一个使用gsubfn
包的选项,它将用“A”替换任何单词,仅用“A”,与“E”相同,任何带有“I”、“O”或“U”的单词都将替换为“IOU”,任何小写元音都将使用“other”替换(这将替换整个字符串,这似乎是所要求的,如果需要其他内容,可以对其进行修改):
库(gsubfn)
替换我猜你想要做。调用和/或lappy
,但你的代码不可复制,所以这仍然是一个猜测,因为我们不知道hold是什么。为什么你不只使用这两列来构建玩具源和目标数据集。然后你应该说正确的答案是什么。看起来你正在替换“TRAVE”对于许多看起来多余的行,使用“TRAVEL”等,或者我遗漏了什么?+1。此外,由于OP提到了“map”,我会发现在调用函数之前,将模式和替换放在一个两列的data.frame中是非常优雅的。
hold<-data.frame(ID=11:12, exp_pur_desc=c('FOOD','FINANCE'))
hold[['exp_pur_desc']] <- strReplace(hold[['exp_pur_desc']],
c('WATER|FOOD|OFFICE|Office|CLEANING|ALARM', 'FUNDRAISING|FINANCE'),
c('OFFICE', 'FUNDRAISING'))
hold
library(gsubfn)
replacements <- list(A='A', E='E', I='IOU', O='IOU', U='IOU', 'other')
gsubfn('^.*?(A|E|I|O|U|a|e|i|o|u).*$', replacements, state.name)