Regex 在字符串内容上创建新变量
如果我有这些字符串:Regex 在字符串内容上创建新变量,regex,r,Regex,R,如果我有这些字符串: dat <- data.frame(xxs = c("PElookx.PElookxstd","POaftGx.POlookGxstd")) 我知道如何使用grep来实现这一点: dat$newxss <- NA dat$newxss[grep("PE",dat$xxs)] <- "NOW" dat$newxss[grep("PO",dat$xxs)] <- "LATER" 有没有比很多grep更简单的方法?因为我必须为同一个新列和许多新列的多个
dat <- data.frame(xxs = c("PElookx.PElookxstd","POaftGx.POlookGxstd"))
我知道如何使用grep来实现这一点:
dat$newxss <- NA
dat$newxss[grep("PE",dat$xxs)] <- "NOW"
dat$newxss[grep("PO",dat$xxs)] <- "LATER"
有没有比很多grep更简单的方法?因为我必须为同一个新列和许多新列的多个字符串位执行此操作。如果所有字符串中都明确包含PE或PO,则可以使用ifelse:
例如:
如果所有字符串中都明确包含PE或PO,则可以使用ifelse:
例如:
如果要执行不同的替换,则可以创建一个自定义函数来同时执行所有替换,例如:
subst <- function(var, corresp) {
sapply(corresp, function(elem) {
var[grep(elem[1],var)] <- elem[2]
})
}
var <- c("PEfoo", "PObar", "PAfoofoo", "PUbarbar")
corresp <- list(c("PE","NOW"),
c("PO","LATER"),
c("PA", "MAYBE"),
c("PU", "THE IPHONE IS IN THE BLENDER"))
subst(var, corresp)
因此,您可以将函数重复应用于数据框的不同列:
dat$new1 <- subst(dat$old1, corresp1)
dat$new2 <- subst(dat$old2, corresp2)
dat$new3 <- subst(dat$old3, corresp3)
...
如果要执行不同的替换,则可以创建一个自定义函数来同时执行所有替换,例如:
subst <- function(var, corresp) {
sapply(corresp, function(elem) {
var[grep(elem[1],var)] <- elem[2]
})
}
var <- c("PEfoo", "PObar", "PAfoofoo", "PUbarbar")
corresp <- list(c("PE","NOW"),
c("PO","LATER"),
c("PA", "MAYBE"),
c("PU", "THE IPHONE IS IN THE BLENDER"))
subst(var, corresp)
因此,您可以将函数重复应用于数据框的不同列:
dat$new1 <- subst(dat$old1, corresp1)
dat$new2 <- subst(dat$old2, corresp2)
dat$new3 <- subst(dat$old3, corresp3)
...
你所有的字符串都有PE或PO吗?你所有的字符串都有PE或PO吗?
[1] "NOW" "LATER"
[3] "MAYBE" "THE IPHONE IS IN THE BLENDER"
dat$new1 <- subst(dat$old1, corresp1)
dat$new2 <- subst(dat$old2, corresp2)
dat$new3 <- subst(dat$old3, corresp3)
...